以下这段 C++ 代码会导致运行时错误,但如果移除掉 mymap.erase(v)
操作它就能够正常工作:
map<int,int> mymap = {{1,0},{2,1},{9,2},{10,3},{11,4}};
for(auto it=mymap.rbegin();it!=mymap.rend();){
int v=it->first;
++it;
mymap.erase(v);
}
在删除值 v
之前,迭代器 it
被改变了,所以我认为迭代器 it
应该没有受到影响。
mymap.rend()
进行了解引用操作。 - Paul Sanders