std :: vector :: erase表示无效范围

时间:2015-01-08 17:17:35

标签: c++ vector

我无法在文档中找到有关std::vector::erase的无效范围(非空,erase已为其定义),例如[end()+1, end())。例如:

std::vector<int> v;
v.erase(std::find(b.begin(), v.end(), 9001) + 1, v.end());

此代码是否可以安全地删除一个特定元素后的元素,或者是否需要检查std::find是否返回了!= v.end()的内容?

2 个答案:

答案 0 :(得分:4)

来自http://www.cplusplus.com/reference/vector/vector/erase/

在异常安全中:

  

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

所以不,代码不安全。

答案 1 :(得分:0)

v.erase(std::find(b.begin(), v.end(), 9001) + 1, v.end());

您必须确保find不返回end(),因为案例范围无效[end()+ 1,end()]这是未定义的行为。

但是,如果你这样做,那么你就不在未定义的行为范围之内。

v.erase(std::find(b.begin(), v.end(), 9001), v.end());