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