c++ - 为什么更喜欢 std::vector 而不是 std::deque?

标签 c++ stl

<分区>

它们都具有 O(1) 的访问复杂度和 O(n) 的随机插入/移除复杂度。但是 vector 在扩展时由于重新分配和复制而花费更多,而 deque 则没有这个问题。

deque似乎性能更好,但为什么大多数人使用vector而不是deque?

最佳答案

why most people use vector instead of deque?

因为这是他们被教导的。

vectordeque 的用途略有不同。如果您需要的话,它们都可以用作对象的简单容器。在学习 C++ 编程时, 大多数人都需要 - 一个可以将东西放进去、从中取出东西并走过去的桶。

当 StackOverflow 被问及“默认情况下我应该使用哪个容器”之类的问题时,答案几乎总是 vector。这个问题通常是在学习用 C++ 编程的背景下提出的,在程序员提出这样的问题时,他们还不知道自己不知道什么。还有很多他们还不知道。因此,我们 (StackOverflow) 需要一个容器来满足几乎所有需求,无论好坏,几乎可以在任何上下文中使用,并且不需要程序员在找到接近正确答案的东西之前问过所有正确的问题。此外,该标准特别推荐使用 vectorvector 并非对所有用途都是最佳,事实上 deque 在许多常见用途上都优于 vector - - 但对于学习中的程序员来说,我们应该改变标准对新手 C++ 程序员的建议并没有那么好,因此 StackOverflow 着眼于 vector

在学习了 C++ 语法的基础知识以及我们应该说的 C++ 编程背后的策略之后,程序员分为两个分支:那些关心学习更多和编写更好的程序的人,以及那些不关心的人。那些不这样做的人将永远坚持 vector。我想很多程序员都属于这个阵营。

尝试超越这个阶段的少数程序员开始提出其他问题——就像您在这里提出的问题。他们知道有很多他们还不知道的东西,他们想开始发现那些东西是什么。他们会很快(或不太快)发现在 vectordeque 之间进行选择时,他们之前没有想到要问的一些问题是:

  1. 我需要内存是连续的吗?
  2. 我是否需要避免大量重新分配?
  3. 我需要在插入后保留有效的迭代器吗?
  4. 我的集合是否需要与某些古老的类 C 函数兼容?

然后他们真正开始思考他们正在编写的代码,发现更多他们不知道的东西,然后节拍继续......

关于c++ - 为什么更喜欢 std::vector 而不是 std::deque?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19031496/

相关文章:

C++ 十六进制乘法段错误

iphone - #include<vector> 没有这样的文件或目录

c++ - 使用 set_difference 时出现编译错误

c++ - 我如何比较 std::vectors 与自定义对象的比较内容

c++ - GUI 卡住时显示带有 QThread 的 QMessageBox

c++ - 从 Arduino 中的字符数组中选择项目

c++ - C编程: Running 2 while loops and get the random result for data from loop1

c++ - 通过树状系统进行高效迭代

c++ - 如何从输出迭代器中获取值类型?

c++ - 为什么调用 std::vector::back() 会使我的程序崩溃