将 vector's end() 传递给 std::vector::erase 有效吗?

Is passing vector's end() to std::vector::erase valid?

本文关键字:vector std erase 有效 end      更新时间:2023-10-16

一个非常简单的问题,但我找不到答案。允许它但想要仔细检查是非常有意义的。

std::vector<int> v(10, 0);
v.erase(v.end()); // allowed or not?

无效的位置或范围会导致未定义的行为。

从这里

迭代器 pos 必须有效且可取消引用。因此结束() 迭代器(有效,但不可取消引用)不能用作 POS 的值。

对于单个参数重载,将end()传递给std::vector::erase是无效的,因为单个参数重载将擦除该位置的元素。 end()位置没有元素,因为end()是最后一个元素的过去。

但是,end()可以传递给采用迭代器范围的erase的重载:

vec.erase(vec.begin(), vec.end())
相关文章: