既然一个容器在堆栈中使用所需的唯一操作是:
- back()
- push_back()
- pop_back()
那么为什么默认容器是deque而不是vector呢?
难道deque重新分配不会在front()之前提供一个元素缓冲区,使得push_front()成为一种有效的操作吗?既然这些元素在堆栈的上下文中永远不会被使用,它们岂不是被浪费了吗?
如果使用deque而不是vector没有任何额外开销,那么为什么priority_queue的默认值是vector而不是deque呢?(priority_queue需要front(),push_back()和pop_back() - 本质上与stack相同)
基于下面的回答进行更新:
看起来deque通常的实现方式是固定大小数组的可变大小数组。这使得增长比vector更快(后者需要重新分配和复制),因此对于像堆栈这样的东西,deque可能是更好的选择。
priority_queue需要大量索引,因为每次删除和插入都需要运行pop_heap()或push_heap()。这可能使得vector在这方面更好,因为添加元素仍然是摊销的常数时间。