我有一个地图,我会像这样迭代:
std::map<unsigned int, GameObject *>::iterator itr = _gameObjects.begin();
while (itr != _gameObjects.end())
{
itr->second->Update();
itr++;
}
Update()可能会将一个元素插入到地图中,甚至可以从中删除一个元素,但它不一定会执行这两个元素中的任何一个。 它显然不会那样工作。有没有办法可以做到?
答案 0 :(得分:5)
擦除元素的引用和迭代器无效。其他引用和迭代器不受影响。
没有迭代器或引用无效。
没有迭代器或引用无效。
如果Update()
没有删除,那么代码是合法的。如果Update()
有,那就不是。 Update()
需要通知调用代码是否自行删除,设置标志或返回下一个迭代器(如Attila所示)。
答案 1 :(得分:1)
STL中的erase
函数通常会将迭代器返回到下一个有效元素(如果没有这样的元素可用,则返回end()
)。您可以从Update
返回此迭代器并将其重新分配给itr