不能假定容器实现。标准对删除操作是否可能造成迭代器失效是明确规定的。这种写法对链表和关联容器没问题,对数组和vector有性能问题,对deque则是错误实现。只从标准文本较真的话vector也是不保证的。
C++20引入erase, erase_if算法解决这个问题,确实有点晚了。以前顺序容器与链表可以remove_if还好,关联容器是要自己写。
对map,参考实现写法不是在删除时用i++而是利用erase返回值写 i=c.erase(i),更合理一些。
https://en.cppreference.com/w/cpp/container/map/erase_if
【 在 z16166 的大作中提到: 】
: 有些实现方式不需要手动写for循环遍历container;
:
: 有些实现方式需要手写for循环,比如要比较std::map<key, value>的value结构里的某些成员,
: ...................
--
修改:milksea FROM 117.172.56.*
FROM 117.172.56.*