采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,您好,这个是运行的您的示例代码,如果将while循环注释掉,下面的for循环就会报迭代器失效问题,如上图 还有,如果将while循环中的if (iter->second < 98.0) 改为if (iter->second < 95.0),则for循环中过滤出的数据错误,没有将LiMing: 95擦除,如下图
和while循环没有关系。你最后一个for循环里的if判断有问题。这时迭代器时效了,必须要更新,你前面那个for循环是对的。然后你的iter++操作要注意,避免重复更新iter,否则会跳过一些元素,导致你说的部分满足条件的元素没被删除。你试试下面的代码。
for (iter = student.begin(); iter != student.end(); )
{
if (iter->second < 98.5)
iter = student.erase(iter);
}
else
iter++;
非常感谢!
老师,您好。你提供的改进方法,我验证了,是可以的。但是我还是不明白,为啥原有for循环中的if写法,如下 for (iter = studentSocres.begin(); iter != studentSocres.end(); iter++) { if (iter->second <= 98.5) { iter = studentSocres.erase(iter); } } 在上面while循环存在的情况下,运行正常;但是如果注释while循环后,会报迭代器失效的问题呢?是while循环不经意做了什么事情,弥补了for循环中的问题吗?谢谢。
你的代码中iter++在if满足时会多执行一次迭代器的跳转,这是问题所在。我没看你while循环,这个你可以自己调试下看看哪里有问题。
登录后可查看更多问答,登录/注册
一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维
1.2k 12
1.3k 10
1.2k 9
991 9