c++ - std::list 迭代中项目的指针

标签 c++ pointers iterator stdlist

我正在开发一款非常基础的游戏,我有一个 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/

相关文章:

c++ - 我们应该考虑使用静态链接和动态链接的什么?

c - 分段故障。错误退出c程序

c - 如何打印字符**

C++ 列表迭代器在遍历时永远不会到达 end()

c++ - 如何针对特定类型使用表达式模板?

c++ - operator<< 内部的虚方法调用

c++ - 为什么右值引用变量不是右值?

c++ - 错误 : no matching member function for call to 'reset' (shared pointers)

c++ - 在 C++ 中迭代 map 时发出 SIGSEGV 信号

java - 迭代一个集合并创建一个包含 HTML 的字符串