2

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

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

2 回答 2

4

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

这里

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

于 2013-09-12T18:08:33.557 回答
1

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

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

vec.erase(vec.begin(), vec.end())
于 2013-09-12T18:05:58.267 回答