在循环遍历矢量时将对象添加到矢量
Adding an object to a vector whilst looping through it
我的"Level"类中有一个GameObject*
向量。
vector<GameObject*> gameObjects;
我像这样向 Vector 添加一个对象:
gameObjects.push_back(new Laser(10, 30));
其中Laser
是GameObject
的子班。然后我像这样循环遍历它们:
void Level::update()
{
for(vector<GameObject*>::const_iterator i = gameObjects.begin(); i != gameObjects.end(); ++i) {
(*i)->update();
}
}
其中void update()
是类 GameObject
的成员函数。现在,在某一时刻,我可能会更新一个对象,例如"枪",这会在其过程中创建另一个对象,例如"子弹",如下所示:
level.gameObjects.push_back(new Bullet(position, rotation));
其中level
是"Level"类的实例。这行代码只是找到,但是在该"帧"的末尾,当level.update()
完成对现有GameObject
的循环时,它会崩溃。这发生在它退出 for 循环之前。
为什么它会崩溃,我该如何解决这个问题?
如果新大小超出容量,则向矢量添加新项可能需要重新分配。 发生这种情况时,迭代器将失效。
潜在的解决方案:
- 使用索引进行迭代以直接访问矢量元素(最简单的解决方案)
- 在开始使用迭代器之前,请确保预留了足够的容量(并非总是可能的)。
相关文章:
- C++ 将子类的对象添加到父类的向量中
- 如何在qt中将对象添加到现有布局中?--已解决
- 测试驱动开发 c++:如何将对象添加到向量中,将歌曲添加到播放列表并对其进行测试
- 在C++中将对象添加到 2D 矢量
- 如何将对象添加到类中的静态向量
- 重载加法运算符(使用函数向对象添加字符串)
- 将对象添加到数组时EXC_BAD_ACCESS
- 仅为从某种语言编译的对象添加链接库?
- C++将带有重载构造函数的对象添加到另一个对象
- 如何在 c++ 中将对象添加到数组中?
- 尝试向 COM 对象添加另一个接口时出现静态强制转换错误 C2440
- 使用类函数将类对象添加到数组中
- 如何在 c c ++ 混合生成文件中为 c 对象添加附加规则?
- 如何从列表中将对象添加到图表中?
- 将对象添加到LinkedList C 中
- 将动态分配的对象添加到对象指针数组中
- 用于将对象添加到指针数组的函数
- 为什么我的代码没有将每个对象添加到向量中
- 是 std::make_pair 在将对象添加到地图时创建副本
- 当我将对象添加到向量时,为什么typeID名称会更改