[英]std::vector::erase for invalid ranges
我在文档中找不到关于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()
吗?
来自http://www.cplusplus.com/reference/vector/vector/erase/
在异常安全方面:
[..]无效的位置或范围会导致未定义的行为。
所以不,代码不安全。
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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.