如果我想在容器的开头也推送元素,我应该使用双端队列而不是 vector 吗?什么时候应该使用 list,它有什么意义?
最佳答案
如果您需要在序列的开头和结尾进行有效的插入/删除以及随机访问,请使用 deque
;如果您需要在任何地方有效插入,请使用 list
,但会牺牲随机访问。 list
元素的迭代器和引用几乎在容器的任何突变下都非常稳定,而 deque
具有非常奇特的迭代器和引用失效规则(因此请仔细检查)。
另外,list
是基于节点的容器,而 deque
使用连续内存块,因此内存局部性可能具有渐近复杂度无法捕获的性能影响估计。
deque
几乎可以在任何地方充当 vector
的替代品,并且可能应该被视为 C++ 中的“默认”容器(考虑到其更灵活的内存要求) ;首选 vector
的唯一原因是当您必须保证序列的连续内存布局时。
关于c++ - STL Containers - vector 、列表和双端队列之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650254/