关于stl 中的map 的erase() 方法

jwb0000 2005-06-12 02:11:48

map<int,string> m;
m.insert(pair<int,string*>(1,new string("china")));
m.insert(pair<int,string*>(5,new string("beijing")));
m.insert(pair<int,string*>(2,new string("shanghai")));
m.insert(pair<int,string*>(7,new string("guangzhu")));
m.insert(pair<int,string*>(3,new string("shenzhen")));
map<int,string*>::iterator it = m.begin();
for(; it != m.end(); it++)
{
dosomthing();
m.erase(it); ///为什么不能这么用
}
...全文
943 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
eric8231 2005-06-13
  • 打赏
  • 举报
回复
“it = m.erase(it);” 本身就不对,当以一个迭代器作为参数时, erase()返回void

同意 foochow(恰似你的温柔) 的方法: m.erase(it++);
mostideal 2005-06-12
  • 打赏
  • 举报
回复
学习。。
oyljerry 2005-06-12
  • 打赏
  • 举报
回复
删除了迭代器失效了
it = m.erase(it);
Stephen_Ma 2005-06-12
  • 打赏
  • 举报
回复
for(; it != m.end();)
{
dosomthing();
it = m.erase(it);
}
fflush 2005-06-12
  • 打赏
  • 举报
回复
m.erase(it); ///为什么不能这么用

这个调用之后将导致迭代器失效,直观上理解,既然你把it从m里面去掉了,你当然就不能指望通过it++来获得下一个元素了
jwb0000 2005-06-12
  • 打赏
  • 举报
回复
不好意思写错了 因该是map<int,string *> m;
不过不是这个原因
eric8231 2005-06-12
  • 打赏
  • 举报
回复
m.erase(it); 本身没有问题。
问题在于pair<int,string*> 和 前面定义的map<int,string> m; 类型不匹配
foochow 2005-06-12
  • 打赏
  • 举报
回复
for(; it != m.end();)
{
dosomthing();
m.erase(it++);
}
lonelyforest 2005-06-12
  • 打赏
  • 举报
回复
等高手吧,最好系统的讲一下了,可以更明白些

64,676

社区成员

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

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