STL容器 - 矢量,列表和双端队列之间的区别

问题描述 投票:12回答:2

如果我想在容器的开头推送元素,我应该使用deque而不是vector吗?我什么时候应该使用列表,它的重点是什么?

c++ stl containers
2个回答
14
投票

如果您需要在序列的开头和结尾有效插入/删除和随机访问,请使用deque;使用list如果你需要在任何地方有效插入,牺牲随机访问。对于list元素的迭代器和引用在容器的几乎任何变异下都非常稳定,而deque具有非常奇特的迭代器和引用失效规则(因此请仔细检查它们)。

此外,list是一个基于节点的容器,而deque使用大块的连续内存,因此内存局部性可能具有无法通过渐近复杂性估计捕获的性能影响。

deque可以作为几乎所有地方的vector的替代品,并且应该被认为是C ++中的“默认”容器(由于其更灵活的内存要求);更喜欢vector的唯一理由是你必须有一个保证序列的连续内存布局。


12
投票

dequevector提供随机访问,list仅提供线性访问。因此,如果你需要能够做容器[i],那就排除了list。另一方面,您可以有效地在list中的任何位置插入和移除项目,并且在vectordeque中间的操作很慢。

dequevector非常相似,基本上可以互换用于大多数用途。只有两个值得一提的差异。首先,vector只能在最后有效地添加新项目,而deque可以有效地在任一端添加项目。那你为什么要用vector呢?与deque不同,vector保证所有项目都将存储在连续的内存位置,这使得在某些情况下更快地迭代它们。

© www.soinside.com 2019 - 2024. All rights reserved.