相关疑难解决方法(0)

为什么std :: stack默认使用std :: deque?

由于在堆栈中使用容器所需的唯一操作是:

  • 背部()
  • 推回()
  • pop_back()

为什么它的默认容器是deque而不是vector?

不要deque重新分配在front()之前给出元素缓冲区,以便push_front()是一个有效的操作吗?这些元素不会浪费,因为它们永远不会在堆栈的上下文中使用吗?

如果没有开销使用一个deque这种方式,而不是一个向量,为什么是priority_queue矢量不是一个deque也默认?(priority_queue需要front(),push_back()和pop_back() - 基本上与堆栈相同)


根据以下答案进行了更新:

似乎deque通常实现的方式是固定大小数组的可变大小数组.这使得比向量的增长速度(这需要重新分配和复制),所以对于像一个栈,所有关于添加和删除元素,双端队列可能是一个更好的选择.

priority_queue需要大量的索引,因为每个删除和插入需要你运行pop_heap()或push_heap().这可能使得向量成为更好的选择,因为添加元素仍然是分摊常数.

c++ containers stl

84
推荐指数
2
解决办法
1万
查看次数

为什么C++已经有队列和堆栈,因为它已经有deque?

我想知道为什么C++有队列和堆栈,因为它已经有deque.

似乎堆栈/队列的运行时和使用deque来模拟堆栈/队列是相同的.此外,deque支持修饰符,如擦除,迭代器和随机访问,堆栈或队列都不支持.

那么为什么C++提供了所有这三个,因为deque比其他两个更强大?

谢谢!

c++ stl deque data-structures

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

标签 统计

c++ ×2

stl ×2

containers ×1

data-structures ×1

deque ×1