2010-06-01 3 views
0

J'ai une fonction d'une classe "Table" qui devrait ajouter un joueur à la table. J'ai décidé que si le siège est pris, la fonction devrait essayer de passer tous les sièges et ajouter le joueur au prochain siège disponible. Comment puis-je l'implémenter dans ma fonction addPlayer?En C++, je veux implémenter un itérateur en anneau pour une deque qui contient une classe définie personnellement

int Table::addPlayer(Player player, int position) 
{ 
deque<Player>::iterator it; 

if(playerList[position] != "(empty seat)") { 
    //What goes here? 
} 
playerList.put(player,it); 
cout >> "Player " >> player.toString >> " sits at position " >> position >> endl; 

}

Répondre

2

Au lieu d'utiliser la position, utilisez le iterator pour pointer vers cette position, en utilisant quelque chose comme ceci:

it = playerList.begin() + position; 

Ensuite, vérifiez si le siège est pris à l'aide du iterator. Si le siège est pris, incrémenter l'itérateur, mais il faut vérifier pour la fin, comme ceci:

while (no empty seat found yet) 
    { 
    ++it; 
    if (it==playerList.end()) it = playerList.begin(); 
    } 

Bien sûr, si tous les sièges ont été prises, cela se traduira par une boucle sans fin. Par conséquent, aussi garder l'itérateur que vous avez commencé à partir (Appelons cette itStart), et ajoutez un contrôle sur elle:

while (no empty seat found yet) 
    { 
    ++it; 
    if (it==playerList.end()) it = playerList.begin(); 
    if (it==itStart) break;  // We tried all seats 
    } 
+0

Merci Patrick. Est-ce que votre premier bloc de code est légal en C++? Puis-je ajouter un int à un itérateur, puis l'affecter à un itérateur? – user83

+1

Dans le cas d'un itérateur à accès aléatoire, oui. Pour plus d'informations, voir http://www.cplusplus.com/reference/std/iterator/RandomAccessIterator/ – Pieter

+1

@George: oui, aussi longtemps que l'itérateur supporte 'operator + (int)'. Les itérateurs à accès aléatoire doivent le faire (la surcharge réelle est pour 'difference_type', mais int convertit implicitement) et deque doit avoir un itérateur à accès aléatoire. –

Questions connexes