请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

for循环中迭代器失效问题

for循环中,当map中只有一个键值对满足要求而不被删除时,依然会报错,请问这个问题该怎么解决?
图片描述
图片描述

正在回答 回答被采纳积分+3

1回答

quickzhao 2022-12-01 21:22:20

改成这样试试:

for (iter = studentSocres.begin(); iter != studentSocres.end(); )

{

if (iter->second <= 99.5)

{

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

}

else

{

iter++;

}

}

for_each(studentSocres.begin(), studentSocres.end(), Display());

cout << endl;


0 回复 有任何疑惑可以回复我~
  • 提问者 慕雪8063727 #1
    可以了,谢谢老师!不过我不明白为什么这样就没问题,iter++写在for循环里就不行呢?
    是因为iter = studentSocres.erase(iter);本身返回的是指向下一个对象的指针,再执行++操作会溢出范围吗?
    回复 有任何疑惑可以回复我~ 2022-12-01 21:34:45
  • quickzhao 回复 提问者 慕雪8063727 #2
    你仔细想想这里的逻辑,事实上这里如果不判断,直接做iter++是有问题的。
    回复 有任何疑惑可以回复我~ 2022-12-01 21:50:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信