【发布时间】:2021-08-09 04:24:28
【问题描述】:
以下 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);
}
这里迭代器 it 在删除其值 v 之前已更改,因此我相信迭代器 it 应该不受影响。
【问题讨论】:
-
为我工作,见here,你能提供一个minimal, reproducible example吗?
-
对我来说失败了:ideone.com/MVpW8S
-
@user4581301 你取消引用
mymap.rend() -
以后不再添加演示作为评论,而是编辑帖子以包含它。这次我做到了。
-
我认为问题出在反向迭代器上,当使用 begin/end 而不是 rbegin/rend 时它可以正常工作。