我应该使用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