我无法在文档中找到有关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()
的内容?
答案 0 :(得分:4)
答案 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());