用C++11怎么写std::map遍历删除

guolisen 2016-01-31 02:43:39
用C++11怎么写std::map遍历删除

还要写成这种恶心的形式吗?有没有好点的写法?
23     for(it=iVec.begin();it!=iVec.end();)
24 {
25 if(*it % 3 ==0)
26 it=iVec.erase(it); //删除元素,返回值指向已删除元素的下一个位置
27 else
28 ++it; //指向下一个位置
29 }


...全文
941 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq179862309 2016-02-02
  • 打赏
  • 举报
回复
好像只能写成这样吧???
sdghchj 2016-02-01
  • 打赏
  • 举报
回复
std::remove_if(iVec.begin(),iVec.end(),[](int i)->bool{return i % 3 == 0;});
yunshouhu 2016-02-01
  • 打赏
  • 举报
回复
8楼正解,std:remove
ri_aje 2016-02-01
  • 打赏
  • 举报
回复
目前只能这样,有提案(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4273.htm)要增加通用的 erase。
cocoabird 2016-02-01
  • 打赏
  • 举报
回复
it=null;
未狂 2016-02-01
  • 打赏
  • 举报
回复
这种方式哪里恶心了……
10km 2016-01-31
  • 打赏
  • 举报
回复
楼主看来是有洁癖啊
paschen 版主 2016-01-31
  • 打赏
  • 举报
回复
引用 4 楼 guolisen 的回复:
可以写成for(auto :) 这种形式吗
不行 https://msdn.microsoft.com/library/jj203382.aspx
guolisen 2016-01-31
  • 打赏
  • 举报
回复
可以写成for(auto :) 这种形式吗
yshuise 2016-01-31
  • 打赏
  • 举报
回复
其实map不用删除的,因为删除要重新调整红黑树的!这种会影响效率的!
yshuise 2016-01-31
  • 打赏
  • 举报
回复
这种方式不恶心
paschen 版主 2016-01-31
  • 打赏
  • 举报
回复
这种方式哪里恶心了。。 http://www.cnblogs.com/dabaopku/p/3912662.html

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧