如何在std :: vector中引用特定元素?常量引用std :: vector
簡單的方法應該是將其存儲爲元素的索引(我正在使用size_t變量)。
我遇到的問題是在當前插入元素的可能性,使存儲的值不正確。
如何在std :: vector中引用特定元素?常量引用std :: vector
簡單的方法應該是將其存儲爲元素的索引(我正在使用size_t變量)。
我遇到的問題是在當前插入元素的可能性,使存儲的值不正確。
唯一可靠的解決方案是讓你的矢量是一個指針矢量,只記住你的指針。
否則,你不能保持一個引用,因爲,正如你所提到的,向量可能會移動元素。
通過指針,引用或索引來跟蹤vector
中的單個元素的方法並不是很好。特別是:
如果你插入一個新元素到vector
,它可能會導致在發生內部重新分配到無效的vector
的元素的所有未完成的引用。插入可以通過調用insert
,reserve
,push_back
或assign
(可能還有其他幾個)來實現。這可能會導致引用引用無效的對象,如果使用該引用,則會導致未定義的行爲。
如果您從vector
中刪除元素,則引用可能不再指向同一元素。訪問參考可能會導致您引用錯誤的對象。
如果你真的必須持有一個vector
一個元素的引用,其中一個方案是有vector
店(智能)對象的指針,而不是對象本身。這樣,您可以在其他地方存儲該指針的副本,而不管vector
中發生了什麼,指針應該仍然有效。這實際上是軟件工程的基本定理 - 增加另一層間接尋址可以解決大多數問題。
使用包含自動指針的向量,即如果您使用C++ 0x,則使用std::vector<std::unique_ptr<YOUR_ELEMENT_TYPE>>
。
也許'std :: vector'不是您需要的正確容器。你想做什麼? –
@Fred Larson @templatetypedef我不想指出元素本身,我想指出它的位置。我創建的是一個在多邊形中使用布爾操作的算法,我需要找到兩個多邊形之間的交點,並知道一個在另一個多邊形中的相同位置,所以我可以從一個多邊形跳到另一個多邊形。我想到std :: list,但我不知道它是否允許我做這樣的事情。 – Wanderson