vector和deque之间的区别

时间:2014-02-27 12:12:18

标签: c++ c++11 vector deque

由于vectordeque两者都为push_back元素提供了函数。

其中deque还提供了一个函数push_front来在开头插入元素,这在vector的情况下成本很高。

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

3 个答案:

答案 0 :(得分:10)

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

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

请注意,对于较小的集合,这种差异在实践中不太重要,但如果例如集合大小增加或者您每秒许多次修改它,通常会变得更加重要。< / p>

答案 1 :(得分:6)

表现,主要是。一个std::deque拥有全部 std::vector的功能,至少在正常使用情况下,但是 索引和迭代它通常会有所不同 慢点;如果你这样做,最后可能会追加 使用reserve。当然,std::vector是默认值 容器,使用其他任何东西都会向读者建议 你有特殊要求。

std::vector也保证了连续性,所以它(只有它) 可用于连接需要T*的遗留函数 或T const*

我可能会补充说,有一次我实际上有表演 问题和衡量标准std::vectorstd::deque快, 尽管我经常从中删除元素 前面(使用容器作为队列,推动后面, 并弹出前面)。我不知道这是否概括, 然而;在我的情况下,队列相对较短(从来没有更多 大约15个元素,通常少了很多),以及内容 是char,这是非常便宜的复制。但总的来说, 即使我需要删除元素,我也会使用std::vector 前面,如果只是因为它更好的地方。我可能 如果我期望成千上万的元素,只考虑std::deque 复制费用很高。

答案 2 :(得分:1)

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