由于在堆栈中使用容器所需的唯一操作是:
为什么它的默认容器是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++有队列和堆栈,因为它已经有deque.
似乎堆栈/队列的运行时和使用deque来模拟堆栈/队列是相同的.此外,deque支持修饰符,如擦除,迭代器和随机访问,堆栈或队列都不支持.
那么为什么C++提供了所有这三个,因为deque比其他两个更强大?
谢谢!