以下 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);
}
Run Code Online (Sandbox Code Playgroud)
这里迭代器it在删除它的 value 之前被改变v,所以it我相信迭代器应该不受影响。