Puntero para el elemento en iteración sobre std :: list
Pregunta
Estoy trabajando en un juego muy básico y tengo una colección std :: list de objetos que pertenecen a mi juego. Lo declaré como:
std::list<Target> targets;
Cuando itero sobre él, usando
for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
Target t = *iter;
t.move();
}
Mis objetos no se actualizan en la GUI. Sin embargo, al reemplazar el bucle iterativo con un targets.front (). Move ()
, mi único objeto se mueve correctamente. Creo que esto se debe a que no estoy iterando sobre la colección usando punteros. ¿Alguien puede explicar cómo se hace eso? Gracias.
Solución
Estás copiando los objetos, hazlo de esta manera:
*iter.move()
Si usa Target t = * iter;
, básicamente está haciendo una copia de su objeto y moviéndolo, en lugar de mover su objeto deseado.
Como xtofl dijo (gracias), también puede obtener la referencia.
Target &t = *iter;
t.move();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow