我有一個包含以下鍵值對的映射。 (d,S),...(g,Z)} {(a,P),(b,Q),(c,R),(d,S),...(g,Z)}我迭代這個映射,採取一個分支訪問這個相同的地圖,並在滿足條件時擦除地圖的一個元素。 簡而言之,當主迭代器在(b.Q)時,分支函數可能會擦除(d,S)。在迭代時擦除std :: map的其他元素
這是否有效?或者將這個seg錯誤。?
我有一個包含以下鍵值對的映射。 (d,S),...(g,Z)} {(a,P),(b,Q),(c,R),(d,S),...(g,Z)}我迭代這個映射,採取一個分支訪問這個相同的地圖,並在滿足條件時擦除地圖的一個元素。 簡而言之,當主迭代器在(b.Q)時,分支函數可能會擦除(d,S)。在迭代時擦除std :: map的其他元素
這是否有效?或者將這個seg錯誤。?
那麼當主函數「達到」(d,S)時它會被刪除? –
擦除元素後(例如(d,S)),該元素不再是容器的一部分。你將永遠不會通過迭代容器來達到它。 CARE:如果你在擦除之前獲得了(d,S)的迭代器,那麼迭代器將失效,所以你不能再使用它了。 – bolov
但它表示失效不會發生在C++ 03中。而且我確實遇到了「Double Free或Corruption」的seg故障 –
http://stackoverflow.com/questions/263945/what-happens-if-you-call-erase-on-a-map-element-while-iterating-from-begin-to?rq=1 –
也許你應該發佈[MVCE](http://stackoverflow.com/help/mcve)。 – erip