我應該使用deque而不是向量,如果我想推入也在容器的開始的元素?我應該什麼時候使用列表,它有什麼意義?STL容器 - 差異向量,列表和德克
6
A
回答
9
如果您需要在序列的開始和結束以及隨機訪問時進行有效的插入/移除,請使用deque
;使用list
如果您需要隨機訪問犧牲任何地方有效的插入。迭代器和對list
元素的引用在容器幾乎任何變化下都非常穩定,而deque
具有非常特殊的迭代器和引用無效規則(因此請仔細檢查它們)。
此外,list
是一個基於節點的容器,而deque
使用的是連續內存塊,因此內存局部性可能具有無法通過漸近複雜度估計捕獲的性能影響。
deque
可以作爲幾乎所有地方的vector
的替代品,並且應該可能被認爲是C++中的「默認」容器(由於其更靈活的內存要求);選擇vector
的唯一原因是您必須保證序列的連續內存佈局。
7
deque
和vector
提供隨機存取,list
只提供線性存取。所以如果你需要做容器[我],那就排除list
。另一方面,您可以有效地在list
的任何位置插入和移除項目,並且vector
和deque
中間的操作速度較慢。
deque
和vector
非常相似,基本上可以互換大多數用途。只有兩個區別值得一提。首先,vector
只能在最後有效地添加新項目,而deque
可以有效地在任一端添加項目。那麼爲什麼你會使用vector
呢?與deque
不同,vector
保證所有項目都將存儲在連續的內存位置,這使得在某些情況下可以更快地迭代它們。
相關問題
- 1. 常量和STL容器
- 2. 向量和列表的複雜性保證差異
- 3. g ++ STL容器initializer_list在4.4和4.7之間的差異
- 4. Visual Studio 2010和2012中STL容器的字節大小差異
- 5. STL容器向前和向後
- 6. WxWidgets和STL向量
- 7. CUDA和STL向量
- 8. STL列表異常
- 9. Clojure中向量和列表上conj的行爲差異
- 10. STL向量回推與設定值之間的性能差異
- 11. stl兼容的容器
- 12. 清理指針的STL列表/向量
- 13. 克服瀏覽器差異
- 14. 常量和非const在STL容器
- 15. STL向量,迭代器和插入(C++)
- 16. 2D陣列差異的Numpy向量化
- 17. STL容器的枚舉列表
- 18. 迭代器和STL容器
- 19. C++ STL容器
- 20. C++ STL集合差異
- 21. STL向量和NSArray速度
- 22. 向量和使用STL
- 23. 正向和反向差異
- 24. STL向量push_back()
- 25. 差異使用克ifstream的++和MSVC
- 26. 卡桑德拉差異
- 27. STL向量vs列表:對圖鄰接列表最有效?
- 28. 使用STL的圖(列表向量,即鄰接列表) - C++
- 29. C++ STL容器和引用
- 30. 模板和STL容器
根據我的經驗,'vector'幾乎總是比'deque'表現得更好。 – 2012-03-10 21:31:11
@DonReba:它取決於用例,而剖析實際上是唯一的答案。如果你想分配一個巨大的範圍,一個向量可能會很困難,而deque可以在不移動舊塊的情況下分配新的塊。當然這取決於你在做什麼。 – 2012-03-10 21:33:52