2012-11-05 56 views
5

您好我需要一個stl容器,它可以被索引爲一個向量,但不會移動內存中的舊元素,就像一個向量可以調整大小或保留一樣(除非我在一開始就調用一次容量足夠所有元素的保留,這對我不好)。 (注意我的地址綁定了元素,所以我期望這些元素的地址永遠不會改變)。所以我找到了這個德克。你認爲這有利於這個目的嗎?重要提示:我只需要推回,但我需要以小塊形式按需增加容器。將stl deque重新分配我的元素(C++)?

回答

10

std::deque「添加或刪除其後部或前部的元素時,永不會使指針或對其餘元素的引用無效」,所以是的,當您只有元素保持原位時。

+0

謝謝!我可以使用推回沒有調整大小?因爲它可能會調整元素的大小。 – user1132655

+0

@ user1132655:當然,只是'push_back'。你爲什麼認爲你需要調整大小?這聽起來像是對我來說過早的優化。 –

+0

對不起,我想問一下,不能,只是調整大小似乎優化可能會改變我的元素,所以不應該在這種情況下使用它。 – user1132655

3

仔細閱讀the documentation似乎表明,只要您在開頭或結尾處插入它就不會使指針無效,並且使指針無效是數據被複制或移動的標誌。

它的構造方式不像鏈接列表,每個元素都是單獨分配的,但是作爲一組鏈接的數組,大概是出於性能原因。改變中間元素的順序將需要移動數據。

+2

更像一個數組數組。鏈接數組提供比鏈接列表更好的遍歷,但沒有隨機訪問。 – Puppy