采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
for循环中,当map中只有一个键值对满足要求而不被删除时,依然会报错,请问这个问题该怎么解决?
改成这样试试:
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;
可以了,谢谢老师!不过我不明白为什么这样就没问题,iter++写在for循环里就不行呢? 是因为iter = studentSocres.erase(iter);本身返回的是指向下一个对象的指针,再执行++操作会溢出范围吗?
你仔细想想这里的逻辑,事实上这里如果不判断,直接做iter++是有问题的。
登录后可查看更多问答,登录/注册
一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维
1.3k 12
1.2k 12
1.3k 10
1.2k 9
1.0k 9