关于iter=studentScores.erase(iter);的问题

来源:10-4 关联容器的插入删除及迭代器失效问题

mahsiaoko

2020-04-12

老师,我发现在for循环中,iter=studentScores.erase(iter)返回的是下一个,但是for循环对又来了一个++操作,这个时候好像就跳过去其中的某些元素了吧?

这是for循环之前的;

http://img.mukewang.com/szimg/5e92c22c09110b5608660282.jpg

for (iter = studentScores.begin(); iter != studentScores.end(); iter++)

{

if (iter->second <= 98.5)

{

iter = studentScores.erase(iter); // 注意:迭代器失效问题

}

}

下面是for循环之后的

http://img1.sycdn.imooc.com/szimg/5e92c280096eed6912730230.jpg

其中95.0下于98.5,没有被删除

写回答

1回答

quickzhao

2020-04-12

这里地方应该将++操作拿出来到else中去。

0
2
Autonomy7269969
回复
mahsiaoko
老师的意思是把for循环中的iter++放到else中去吗。意味着erase()已经完成了迭代器前移的操作?那上面案例在erase(iter++)不等于移了两次?
2020-06-15
共2条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程