簡體   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