2012-03-10 42 views

回答

9

如果您需要在序列的開始和結束以及隨機訪問時進行有效的插入/移除,請使用deque;使用list如果您需要隨機訪問犧牲任何地方有效的插入。迭代器和對list元素的引用在容器幾乎任何變化下都非常穩定,而deque具有非常特殊的迭代器和引用無效規則(因此請仔細檢查它們)。

此外,list是一個基於節點的容器,而deque使用的是連續內存塊,因此內存局部性可能具有無法通過漸近複雜度估計捕獲的性能影響。

deque可以作爲幾乎所有地方的vector的替代品,並且應該可能被認爲是C++中的「默認」容器(由於其更靈活的內存要求);選擇vector的唯一原因是您必須保證序列的連續內存佈局。

+1

根據我的經驗,'vector'幾乎總是比'deque'表現得更好。 – 2012-03-10 21:31:11

+3

@DonReba:它取決於用例,而剖析實際上是唯一的答案。如果你想分配一個巨大的範圍,一個向量可能會很困難,而deque可以在不移動舊塊的情況下分配新的塊。當然這取決於你在做什麼。 – 2012-03-10 21:33:52

7

dequevector提供隨機存取,list只提供線性存取。所以如果你需要做容器[我],那就排除list。另一方面,您可以有效地在list的任何位置插入和移除項目,並且vectordeque中間的操作速度較慢。

dequevector非常相似,基本上可以互換大多數用途。只有兩個區別值得一提。首先,vector只能在最後有效地添加新項目,而deque可以有效地在任一端添加項目。那麼爲什麼你會使用vector呢?與deque不同,vector保證所有項目都將存儲在連續的內存位置,這使得在某些情況下可以更快地迭代它們。