Pointeur pour l'élément en itération sur std :: list
Question
Je travaille sur un jeu très basique et j'ai une collection d'objets std :: list qui se rapportent à mon jeu. Je l'ai déclaré comme:
std::list<Target> targets;
Quand j'itère dessus, en utilisant
for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
Target t = *iter;
t.move();
}
Mes objets ne sont pas mis à jour sur l'interface graphique. Cependant, en remplaçant la boucle itérative par un target.front (). Move ()
, mon seul objet se déplace correctement. Je pense que c'est parce que je ne parcourt pas la collection avec des pointeurs. Quelqu'un peut-il expliquer comment cela est fait? Merci.
La solution
Vous copiez les objets, procédez comme suit:
*iter.move()
Si vous utilisez Target t = * iter;
, vous faites essentiellement une copie de votre objet et le déplacez au lieu de déplacer l'objet souhaité.
Comme xtofl l'a dit (thx), vous pouvez également obtenir la référence.
Target &t = *iter;
t.move();