![](/img/trans.png)
[英]I want to perform in place modification to a std::map while iterating over it
[英]Inserting into std::map while iterating over it?
我有一個地圖,我迭代這樣:
std::map<unsigned int, GameObject *>::iterator itr = _gameObjects.begin();
while (itr != _gameObjects.end())
{
itr->second->Update();
itr++;
}
Update()可能會將一個元素插入到地圖中,甚至可以從中刪除一個元素,但它不一定會執行這兩個元素中的任何一個。 它顯然不會那樣工作。 有沒有辦法可以做到?
擦除元素的引用和迭代器無效。 其他引用和迭代器不受影響。
沒有迭代器或引用無效。
沒有迭代器或引用無效。
如果Update()
沒有刪除自己,那么代碼是合法的。 如果Update()
有,那么它不是。 Update()
來通知調用代碼它是否自行刪除,設置標志或返回下一個迭代器(如Attila所建議的那樣)。
STL中的erase
函數通常會將迭代器返回到下一個有效元素(如果沒有這樣的元素可用,則返回end()
)。 您可以從Update
返回此迭代器並將其重新分配給itr
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.