开发者社区> 问答> 正文

前几天遇到的C++ map::erase问题. 400 请求报错 

下面的代码能发现问题吗?

for (std::map<int, int>::iterator it = obj.begin(); it != obj.end(); ++it) { if (cond(*it)) { obj.erase(it); } }
如果你够敏锐, 会很快发现erase使it失效.
只是这样的代码跑起来不一定总出错, 这就给排错带来问题.
我就是一开始没查文档, 只简单测试了代码, 结果中招了.

展开
收起
kun坤 2020-05-29 22:40:09 747 0
1 条回答
写回答
取消 提交回答
  • 确实挺奇怪的,list和vector的erase方法都返回一个iterator,指向被删除元素的下一个元素,唯独map,set,multimap,multiset这4个竟然返回void.
    不过在C++11中已经改正过来了,都返回一个iterator ######

    引用来自“stxy0509”的答案

    确实挺奇怪的,list和vector的erase方法都返回一个iterator,指向被删除元素的下一个元素,唯独map,set,multimap,multiset这4个竟然返回void. 不过在C++11中已经改正过来了,都返回一个iterator
    是的,只是11还不普及. ######据说erase以后it不能用来++######

    引用来自“xuyongqang”的答案

    据说erase以后it不能用来++
    我想应该是不能,只是++有时不出错.
    2020-05-29 22:40:15
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载