相关疑难解决方法(0)

为什么std :: vector比std :: deque更受欢迎?

可能重复:
为什么我更喜欢使用vector来deque

我很好奇为什么它std::vector比这更受欢迎std::deque.Deque几乎和查找一样有效,插入更有效(没有vector :: reserve),允许在前面插入/删除.

Herb Sutter曾经建议如果你想使用矢量,那就更喜欢deque(我在解读).然而,在最近关于编写Modern C++的演讲中,他再次强烈建议将其std::vector视为默认容器.根据我之前链接的GOTW,即使标准也有类似的措辞.

有这种差异的原因吗?它vector是否更简单,更为人所知,还是有技术原因?或者它vector只是一个更酷的名字..?

c++ vector deque

51
推荐指数
5
解决办法
6033
查看次数

为什么喜欢std :: vector而不是std :: deque?

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

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

c++ stl

9
推荐指数
3
解决办法
1545
查看次数

vector和deque之间的区别

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

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

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

c++ vector deque c++11

6
推荐指数
3
解决办法
2万
查看次数

为什么不总是使用循环数组双端队列而不是数组列表?

几乎所有的编程语言都有一些使用动态数组的列表的实现,当它达到一定容量时会自动扩展。例如,Java 有ArrayList,C++ 有std::vector

最近我了解了循环数组双端队列,它也是使用动态数组实现的。它们跟踪列表的起始索引,并使用模运算来访问元素。与数组列表一样,它们允许 O(1) 查找和 O(1) 在末尾插入,并且空间与 O(N) 成正比。但是,它们也允许在开头插入 O(1)。

(虽然 JavaArrayDeque实现了这种数据结构,但它不允许查找元素。C++std::deque似乎使用了不同的实现。)

如果这些数组双端队列具有与数组列表相同或更好的性能特征,那么为什么不总是将它们用作列表的默认实现呢?

arrays computer-science deque data-structures

6
推荐指数
1
解决办法
929
查看次数

标签 统计

c++ ×3

deque ×3

vector ×2

arrays ×1

c++11 ×1

computer-science ×1

data-structures ×1

stl ×1