我正在开发一款非常基础的游戏,我有一个 std::list 对象集合,这些对象与我的游戏有关。我将其声明为:
std::list<Target> targets;
当我遍历它时,使用
for (std::list<Target>::iterator iter = targets.begin(); iter != targets.end(); iter++) {
Target t = *iter;
t.move();
}
我的对象没有在 GUI 上更新。但是,用 targets.front().move()
替换迭代循环后,我的一个对象可以正确移动。我认为这是因为我没有使用指针遍历集合。任何人都可以解释这是如何完成的吗?谢谢。
最佳答案
你正在复制对象,这样做:
*iter.move()
如果您使用 Target t = *iter;
,您实际上是在复制您的对象并移动它,而不是移动您想要的对象。
正如 xtofl 所说(thx),您也可以获得引用。
Target &t = *iter;
t.move();
关于c++ - std::list 迭代中项目的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803281/