繁体   English   中英

std :: vector :: erase无效范围

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM