我正在讀約deque
s和vector
s,而在其wikipedia entry,它說的使用動態陣列deque
三種可能的實現方式之一是傳來:在STL實現中是否有中心分配雙向或向量?
分配從底層陣列的中心雙端隊列內容,和 當達到任一端時調整底層數組的大小。這種方法可能需要更頻繁的重做並浪費更多的空間,特別是當元素僅在一端插入時。
我想知道是否有任何實際使用這種中心分配策略的STL(或STL樣式)實現?
我在問,因爲這個策略看起來相當有吸引力,因爲它只涉及一個底層陣列,因此消除了內存分散性問題,這可能是deque
與vector
相比唯一的主要問題。如果我的理解正確的話,這很可能是std::vector
的替代品,它允許O(1)pop_front
(攤銷)或替換deque
以保證內存連續性。我認爲這是以減少std::vector
的緩衝空間爲代價的,這對我的用例來說不是主要關心的問題。
另外,在這樣的容器中插入/刪除的時間是否平均需要花費一半的時間std::vector
?
UPDATE:
由於@Lightness種族在軌道中指出,這樣的實施將不會在目前的標準中,因爲沒有人可以從每份合約的上漲空間與STL中受益,每個人都會從遭受缺點。我有一個關於該缺點的另一個問題是:
是否有可能實現新vector
或deque
類似容器(比如bivector
),使得除了std::vector
功能/運營商,
1 )提供(攤銷)恆定時間push_front()
和pop_front()
操作和
2)保證內存連續性,但不增長大小後的迭代器有效性?
我想在場景後面有一個陣列,deque
上的很多間接/性能問題就會消失。
爲了保持連續性,您是否仍然需要移動內容一旦打到數組的末尾? – Pradhan
也許我們可以重新分配內存,因爲當它到達右端時,std :: vector會進行分配。我認爲,與非矢量插入物平均的再分配成本與「矢量」一樣按O(1)攤銷。我想我們可以做兩端的「矢量」技巧。 – tinlyx