迭代器失效问题

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

慕妹4782275

2021-01-25

图片描述
老师,您好,这个是运行的您的示例代码,如果将while循环注释掉,下面的for循环就会报迭代器失效问题,如上图
还有,如果将while循环中的if (iter->second < 98.0) 改为if (iter->second < 95.0),则for循环中过滤出的数据错误,没有将LiMing: 95擦除,如下图
图片描述

写回答

1回答

quickzhao

2021-01-26

和while循环没有关系。你最后一个for循环里的if判断有问题。这时迭代器时效了,必须要更新,你前面那个for循环是对的。然后你的iter++操作要注意,避免重复更新iter,否则会跳过一些元素,导致你说的部分满足条件的元素没被删除。你试试下面的代码。

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

{

     if (iter->second < 98.5)

    {

        iter = student.erase(iter);

    }

    else

    {

        iter++;

    }

}


0
3
quickzhao
回复
慕妹4782275
你的代码中iter++在if满足时会多执行一次迭代器的跳转,这是问题所在。我没看你while循环,这个你可以自己调试下看看哪里有问题。
2021-01-27
共3条回复

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

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

3884 学习 · 1103 问题

查看课程