Puntatore per l'elemento in iterazione su std :: list
Domanda
Sto lavorando a un gioco molto semplice e ho una raccolta di oggetti std :: list che riguardano il mio gioco. L'ho dichiarato come:
std::list<Target> targets;
Quando eseguo l'iterazione su di esso, usando
for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
Target t = *iter;
t.move();
}
I miei oggetti non si aggiornano sulla GUI. Tuttavia, sostituendo il ciclo iterativo con un target.front (). Move ()
, il mio unico oggetto si sposta correttamente. Penso che ciò sia dovuto al fatto che non sto ripetendo la raccolta utilizzando i puntatori. Qualcuno può spiegare come è fatto? Grazie.
Soluzione
Stai copiando gli oggetti, fallo in questo modo:
*iter.move()
Se usi Target t = * iter;
stai essenzialmente facendo una copia del tuo oggetto e spostandolo, invece di spostare l'oggetto desiderato.
Come diceva xtofl (thx) puoi ottenere anche il riferimento.
Target &t = *iter;
t.move();