簡體   English   中英

將std :: vector附加到自身,未定義的行為?

[英]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)具有以下前提條件:

ij不是迭代器a

換句話說,允許序列容器安全地假設如果執行范圍插入操作,則不會從原始容器上的迭代器定義該范圍。

因此,如果您嘗試將容器的元素插入到自身中,那么您將調用標准庫函數並打破前提條件。 這導致了未定義的行為,這意味着如果庫實現者是好人,它可能在某些平台上工作,但它可能非常災難性地失敗而沒有任何理由。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM