[英]Appending std::vector to itself, undefined behavior?
這個問題使我不確定將一個向量附加到自身。 所以問題是:遵循代碼行做我所期望的,但它是否符合標准?
vec.reserve(vec.size() * 2):
vec.insert(vec.end(), vec.begin(), vec.end());
以下(沒有reserve()
)仍然有效,甚至標准符合?
vec.insert(vec.end(), vec.begin(), vec.end());
還是實施依賴?
根據C ++ 03 ISO規范(§23.1.1,表67)(和@AndyProwl在§23.2.3中提到的,C ++ 11 ISO規范的表11),作為序列要求的一部分,序列容器中的操作a.insert(p, i, j)
具有以下前提條件:
i
,j
不是迭代器a
。
換句話說,允許序列容器安全地假設如果執行范圍插入操作,則不會從原始容器上的迭代器定義該范圍。
因此,如果您嘗試將容器的元素插入到自身中,那么您將調用標准庫函數並打破前提條件。 這導致了未定義的行為,這意味着如果庫實現者是好人,它可能在某些平台上工作,但它可能非常災難性地失敗而沒有任何理由。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.