迭代器失效问题
来源:10-4 关联容器的插入删除及迭代器失效问题
慕妹4782275
2021-01-25
老师,您好,这个是运行的您的示例代码,如果将while循环注释掉,下面的for循环就会报迭代器失效问题,如上图
还有,如果将while循环中的if (iter->second < 98.0) 改为if (iter->second < 95.0),则for循环中过滤出的数据错误,没有将LiMing: 95擦除,如下图
写回答
1回答
-
和while循环没有关系。你最后一个for循环里的if判断有问题。这时迭代器时效了,必须要更新,你前面那个for循环是对的。然后你的iter++操作要注意,避免重复更新iter,否则会跳过一些元素,导致你说的部分满足条件的元素没被删除。你试试下面的代码。
for (iter = student.begin(); iter != student.end(); )
{
if (iter->second < 98.5)
{
iter = student.erase(iter);
}
else
{
iter++;
}
}
032021-01-27
相似问题