Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在std::map上迭代时插入它?_C++_Stdmap - Fatal编程技术网

C++ 在std::map上迭代时插入它?

C++ 在std::map上迭代时插入它?,c++,stdmap,C++,Stdmap,我有一个映射,我在上面迭代如下: std::map<unsigned int, GameObject *>::iterator itr = _gameObjects.begin(); while (itr != _gameObjects.end()) { itr->second->Update(); itr++; } std::map::iterator itr=_gameObjects.begin(); whil

我有一个映射,我在上面迭代如下:

std::map<unsigned int, GameObject *>::iterator itr = _gameObjects.begin();
    while (itr != _gameObjects.end())
    {
        itr->second->Update();
        itr++;
    }
std::map::iterator itr=_gameObjects.begin();
while(itr!=\u gameObjects.end())
{
itr->second->Update();
itr++;
}
Update()可能会在映射中插入一个元素,甚至从中删除一个元素,但它不一定会执行这两种操作中的任何一种。 它显然不是那样工作的。有办法吗?

来自:

对已删除元素的引用和迭代器无效。其他引用和迭代器不受影响

发件人:

没有无效的迭代器或引用

发件人:

没有无效的迭代器或引用


如果
Update()
没有删除自身,则该代码是合法的。如果
Update()
,则不是
Update()
需要在调用代码删除自身时通知调用代码,或者设置标志,或者返回下一个迭代器(如所建议)。

STL中的
erase
函数通常将迭代器返回到下一个有效元素(或者
end()
如果没有这样的元素可用)。您可以从
Update
返回此迭代器,并将其重新分配给
itr

哪些键可以
Update()
插入?如果新元素插入到迭代器的当前位置之前,您希望执行什么操作?是否可以
Update()
删除自身?@hmjd现在可以,是的。@Mankarse我不明白您的第一个问题,抱歉。在Update()中,可能会在映射中插入一个全新的键值对。对于第二个,无论是调用Update()还是not@tschaei:我的问题措词不当,但你的回答几乎涵盖了这一点(;谢谢。这意味着我必须在更新()中设置的GameObject类中添加布尔擦除,并让循环处理元素的移除。