erase()删除相关问题
来源:10-4 关联容器的插入删除及迭代器失效问题
Mr__Xin
2021-03-07
在删除元素的时候,我发现了两个问题:
- 假如现在有三个元素:
- A: 95.0
- B: 95.5
- E: 98.3
我要删除小于98.0分的元素
for (iterator = studentScore.begin(); iterator != studentScore.end(); iterator ++)
if (iterator->second < 98.0)
iterator = studentScore.erase(iterator);
结果是只会删除A,而不是A和B:
B: 95.5
E: 98.3
经过调试,发现在删除A后,迭代器更新,指向了B。而后for循环更新,迭代器指向了E,E大于98.0不会被删除。而后退出循环,导致B没有被删除。
但是这种结果显然是错误的,请问如何在使用for循环的前提下解决这个问题呢?
2. 假设现在要删除小于99.0分的元素,也就是说三个元素都要被删除。
for (iterator = studentScore.begin(); iterator != studentScore.end(); iterator ++)
if (iterator->second < 99.0)
iterator = studentScore.erase(iterator);
但是结果出错。
经过调试,发现当删除完后,iterator++出错,因为容器已经为空了。
请问这个问题如何在使用for循环的前提下解决呢?
写回答
2回答
-
for (iterator = studentScore.begin(); iterator != studentScore.end(); )
if (iterator->second < 98.0)
iterator = studentScore.erase(iterator);else
iterator++;
改成这样,你再试试。
112021-03-11 -
慕斯7184964
2022-01-18
erase做擦除的时候返回了下一个迭代器iter,那么就不用做自增操作了。
012022-01-18
相似问题
关于erase的相关问题
回答 1
运行目标问题
回答 1