Ponteiro para o item na iteração sobre std :: lista
Pergunta
Eu estou trabalhando em um jogo muito básico e eu tenho uma coleção std :: lista de objetos que pertencem ao meu jogo. I declarou-o como:
std::list<Target> targets;
Quando eu iterar sobre ele, usando
for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
Target t = *iter;
t.move();
}
Os meus objetos não estão atualizando na GUI. No entanto, substituindo o loop iteração com um targets.front().move()
, meus um objeto se move corretamente. Eu acho que isso é porque eu não estou iteração sobre a coleção usando ponteiros. Alguém pode explicar como isso é feito? Obrigado.
Solução
Você está copiando os objetos, fazê-lo desta maneira:
*iter.move()
Se você usar Target t = *iter;
você está fazendo essencialmente uma cópia de seu objeto e movê-lo, em vez de mover o seu objeto pretendido.
Como xtofl disse (THX) você pode obter a referência também.
Target &t = *iter;
t.move();