Указатель для элемента в итерации по std :: list - PullRequest
1 голос
/ 26 ноября 2009

Я работаю над очень простой игрой, и у меня есть коллекция std :: list объектов, относящихся к моей игре. Я объявил это как:

std::list<Target> targets;

Когда я повторяю это, используя

for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
        Target t = *iter;
                t.move();
}

Мои объекты не обновляются в графическом интерфейсе. Однако, заменив итерационный цикл на targets.front().move(), мой единственный объект перемещается правильно. Я думаю, что это потому, что я не перебираю коллекцию, используя указатели. Кто-нибудь может объяснить, как это делается? Спасибо.

1 Ответ

4 голосов
/ 26 ноября 2009

Вы копируете объекты, делайте это так:

*iter.move()

Если вы используете Target t = *iter;, вы, по сути, делаете копию своего объекта и перемещаете его, а не перемещаете намеченный объект.

Как сказал xtofl (thx), вы также можете получить ссылку.

Target &t = *iter;
t.move();
...