C++标准库<algorithms>操作是否存在迭代器失效规则?
C++20中vector的erase/erase_if与迭代器有效性
在C++20的vector中,erase和erase_if方法的效果分别基于remove和remove_if定义(对应标准条款[vector.erasure/1]):
效果:等价于:
auto it = remove(c.begin(), c.end(), value); auto r = distance(it, c.end()); c.erase(it, c.end()); return r;
相关的容器要求条款可参考[container.reqmts/67]:
除非另有规定(明确规定或通过其他函数定义本函数),调用容器成员函数或向库函数传递容器参数,不得使容器内对象的迭代器失效或改变其值。
但目前找不到任何针对<algorithms>中操作(包括remove/remove_if)的迭代器相关明确规定。
内容的提问来源于stack exchange,提问作者klezki
相关产品推荐
相关产品推荐

