Comportamento estranho srand dentro para loop; c ++

Apenas escrever um programa para embaralhar um baralho de cartas e ter um comportamento diferente, dependendo se o RNG foi propagado dentro ou fora do loop for; ie.

  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;
}

dá a saída

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

etc, mas

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;
}

leva a

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

(a funcionalidade correta). Alguém sabe por que a propagação do RNG causaria isso?

questionAnswers(4)

yourAnswerToTheQuestion