Указатель для элемента в итерации по std :: list
Вопрос
Я работаю над очень простой игрой, и у меня есть коллекция std :: list объектов, относящихся к моей игре. Я объявил это как:
std::list<Target> targets;
Когда я перебираю это, используя
for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
Target t = *iter;
t.move();
}
Мои объекты не обновляются в графическом интерфейсе. Однако, заменив итерационный цикл на target.front (). Move ()
, мой единственный объект перемещается правильно. Я думаю, что это потому, что я не перебираю коллекцию, используя указатели. Кто-нибудь может объяснить, как это делается? Спасибо.
Решение
Вы копируете объекты, делайте это следующим образом:
*iter.move()
Если вы используете Target t = * iter;
, вы, по сути, делаете копию своего объекта и перемещаете его, а не перемещаете нужный объект.
Как сказал xtofl (thx), вы также можете получить ссылку. Р>
Target &t = *iter;
t.move();
Не связан с StackOverflow