Dziwne zachowanie srand wewnątrz pętli; c ++

Wystarczy napisać program, aby przetasować talię kart i uzyskać inne zachowanie w zależności od tego, czy RNG zostało zaszczepione wewnątrz lub na zewnątrz pętli for; to znaczy.

  for(int i = 0; i < 52; i++)
{
  srand(time(0));  
  Card temp = deck[i];
  int toSwap = rand()%52;
  deck[i] = deck[toSwap];
  deck[toSwap] = temp;
}

daje wyjście

Nine of Hearts
Ace of Clubs
Two of Clubs
Three of Clubs
Four of Clubs

etc, ale

void DeckOfCards::shuffle()
{
  srand(time(0));  
  for(int i = 0; i < 52; i++)
  {
  Card temp = deck[i];
  int toSwap = rand()%52;
  deck[i] = deck[toSwap];
  deck[toSwap] = temp;
  }
  currentCard =0;
}

prowadzi do

Ace of Hearts
Queen of Spades
Four of Hearts
Seven of Clubs
Five of Hearts

(poprawna funkcjonalność). Ktoś wie, dlaczego ponowne umieszczenie RNG mogłoby to spowodować?