簡體   English   中英

stl :: deque的insert(loc,val)-與其他位置在deque末尾的行為不一致?

[英]stl::deque's insert(loc, val) - inconsistent behavior at end of deque vs other locations?

使用http://www.cppreference.com/wiki/stl/deque/insert作為參考,我將值插入雙端隊列的某些位置。

例如,如果雙端隊列A為:

a, b, d, e, g

使用指向d的迭代器,我可以:

A.insert(iter, c);    // insert val c before loc iter
//deque is now    a, b, c, d, e, g

並且iter仍然指向d。 但是,當iter指向g時,最后一個元素:

A.insert(iter, f);
//deque is now    a, b, c, d, e, f, g

但是迭代器現在指向f!

我當前的解決方法是:

iter = A.insert(loc, val);  // point iterator to element that was inserted before loc
iter++;                     // point iter back to loc

我沒有再測試過它或任何東西,花這么多時間跟蹤錯誤,只是為了發現在所有地方在stl中insert()的不一致行為,這很煩人。

與其他位置相比,為什么insert()的末尾行為有所不同? 還是我做錯了什么?

執行插入操作會使所有現有的迭代器無效,因此,通過重用舊的迭代器,您將獲得不可預測的行為(可能是崩潰)。

您的解決方法是正確的解決方案。

編輯:關於第二個問題, if (*iter == 'g')之后缺少括號。 不過,將來請在新帖子中提出新問題。

暫無
暫無

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

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