vector和deque之间的区别

raj*_*dit 6 c++ vector deque c++11

As vectordequeBoth都为push_back最后的元素提供了一个函数.

其中deque还提供了一个push_front在开头插入元素的功能,在这种情况下有点成本vector.

我的问题是,当我们通过使用实现相同的功能(push_back)时,为什么需要? vectordequevector

pax*_*blo 10

矢量和deques之间的一个主要区别是后者允许在结构的前部以及后部有效插入.

Deques也不保证它们的元素在内存中是连续的,因此at-style操作符(索引)可能效率不高.

请注意,不同的是不太可能在实践中更小的藏品重要,但如果,例如,集合大小的增加,或者你修改它一般会变得更加重要,很多次每秒.

  • [所以`std :: deque`](http://en.cppreference.com/w/cpp/container/deque/operator_at). (4认同)

Jam*_*nze 7

表现主要是.一个std::deque具有所有的功能std::vector,至少对于正常使用,但索引和遍历它通常将是略慢; 如果你习惯的话,最后可以追加reserve.当然,std::vector是默认容器,使用其他任何东西都会向读者建议您有特殊要求.

std::vector也保证了连续性,因此它(并且只有它)可用于连接需要a T* 或a的遗留功能T const*.

我可能会补充说,有一次我实际上遇到了一个性能问题,而且测std::vector得的速度要快std::deque, 尽管事实上我经常从前面移除元素(使用容器作为队列,向后推,然后弹出面前).但是,我不知道这是否概括; 在我的情况下,队列相对较短(从不超过大约15个元素,通常更少),内容是char,复制非常便宜.但总的来说,std::vector即使我需要从前面删除元素,我也会使用它,如果只是因为它更好的局部性.我可能只考虑std::deque我是否期望成千上万的元素,复制起来很昂贵.


Mar*_*ila 5

std::deque是一个双端队列。它也提供了有效的元素插入和删除,而不仅仅是在结尾,就像std::vector那样。向量保证将元素存储在连续存储中,因此您可以通过索引/偏移量访问其元素。std::deque不提供此保证。

  • 您还可以使用 `[]` 或 `at()` 访问 `deque` 的元素。该级别的界面没有区别。 (9认同)