我在文档中找不到任何关于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()
发布于 2015-01-08 17:21:15
来自http://www.cplusplus.com/reference/vector/vector/erase/
例外情况下安全:
。。无效的位置或范围会导致未定义的行为。
所以不,密码不安全。
发布于 2015-01-08 17:20:40
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());
https://stackoverflow.com/questions/27845890
复制相似问题