由于要在堆栈中使用容器的唯一操作是:
- 背部()
- 推回()
- pop_back()
为什么默认容器是双端队列而不是向量?
难道双端队列重分配不会在front()之前提供元素的缓冲区,以便push_front()是有效的操作?这些元素不会浪费,因为它们永远不会在堆栈的上下文中使用吗?
如果没有用这种方式使用双端队列代替向量的开销,为什么priority_queue的默认向量也不是双端队列?(priority_queue需要front(),push_back()和pop_back()-与堆栈基本相同)
根据以下答案进行了更新:
似乎双端队列通常实现的方式是固定大小数组的可变大小数组。这使得它的增长速度比矢量(需要重新分配和复制)的增长速度快,因此对于像堆栈这样的所有元素而言,添加和删除元素都是可行的,双端队列可能是一个更好的选择。
priority_queue需要大量索引,因为每次删除和插入都需要运行pop_heap()或push_heap()。因为添加元素无论如何仍会摊销常量,所以这可能使vector成为更好的选择。