[英]Constant reference std::vector
如何引用 std::vector 中的特定元素?
簡單的方法應該是將其存儲為元素的索引(我使用的是 size_t 變量)。
我遇到的問題是在當前元素之前插入元素的可能性,使存儲的值不正確。
沒有一種很好的方法可以通過指針、引用或索引來跟蹤vector
內的單個元素。 尤其是:
如果將新元素插入到vector
中,如果發生內部重新分配,可能會導致對vector
元素的所有未完成引用無效。 插入可以通過調用insert
、 reserve
、 push_back
或assign
(可能還有其他一些)來發生。 這可能會導致引用引用無效的 object,如果使用引用會導致未定義的行為。
如果從vector
中刪除一個元素,則引用可能不再指向同一個元素。 訪問參考可能會導致您引用錯誤的 object。
如果您確實必須在vector
中保存對元素的引用,則一種選擇是讓vector
存儲(智能)指向對象的指針,而不是對象本身。 這樣,您可以將該指針的副本存儲在其他地方,並且無論vector
中發生什么,該指針都應該仍然有效。 這確實是實踐中軟件工程的基本定理——添加另一層間接可以解決大多數問題。
唯一可靠的解決方案是讓你的向量成為一個指針向量並記住你的指針。
否則,您將無法維護引用,因為正如您所提到的,向量可能會移動元素。
如果您使用的是 c++0x,請使用包含自動指針的向量,即std::vector<std::unique_ptr<YOUR_ELEMENT_TYPE>>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.