传递vector的end()到std :: vector :: erase有效吗?

时间:2013-09-12 18:05:24

标签: c++ vector erase

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

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

2 个答案:

答案 0 :(得分:2)

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

来自here

  

迭代器pos必须是有效且可解除引用的。因此结束()   迭代器(有效但不可解除引用)不能用作   pos的值。

答案 1 :(得分:0)

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

但是,end()可以传递给占用Iterator范围的erase重载:

vec.erase(vec.begin(), vec.end())