簡體   English   中英

常量引用 std::vector

[英]Constant reference std::vector

如何引用 std::vector 中的特定元素?

簡單的方法應該是將其存儲為元素的索引(我使用的是 size_t 變量)。

我遇到的問題是在當前元素之前插入元素的可能性,使存儲的值不正確。

沒有一種很好的方法可以通過指針、引用或索引來跟蹤vector內的單個元素。 尤其是:

  1. 如果將新元素插入到vector中,如果發生內部重新分配,可能會導致對vector元素的所有未完成引用無效。 插入可以通過調用insertreservepush_backassign (可能還有其他一些)來發生。 這可能會導致引用引用無效的 object,如果使用引用會導致未定義的行為。

  2. 如果從vector中刪除一個元素,則引用可能不再指向同一個元素。 訪問參考可能會導致您引用錯誤的 object。

如果您確實必須在vector中保存對元素的引用,則一種選擇是讓vector存儲(智能)指向對象的指針,而不是對象本身。 這樣,您可以將該指針的副本存儲在其他地方,並且無論vector中發生什么,該指針都應該仍然有效。 這確實是實踐中軟件工程的基本定理——添加另一層間接可以解決大多數問題。

唯一可靠的解決方案是讓你的向量成為一個指針向量並記住你的指針。

否則,您將無法維護引用,因為正如您所提到的,向量可能會移動元素。

如果您使用的是 c++0x,請使用包含自動指針的向量,即std::vector<std::unique_ptr<YOUR_ELEMENT_TYPE>>

暫無
暫無

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

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