在cplusplus.com上阅读,std::queue
实现如下:
队列被实现为容器适配器,它们是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问其元素。元素被推入特定容器的“后部”并从其“前部”弹出。
底层容器可能是标准容器类模板之一或其他一些专门设计的容器类。该底层容器应至少支持以下操作:
……
标准容器类deque和list满足这些要求。默认情况下,如果没有为特定队列类实例指定容器类,则使用标准容器双端队列。
我很困惑为什么在这里使用deque(类固醇上的双端队列)作为默认值,而不是list(这是一个双向链表)。
在我看来这std::deque
太过分了:它是一个双端队列,但也具有恒定时间元素访问和许多其他特性;基本上是一个功能齐全的 std::vector 条,“元素连续存储在内存中”保证。
由于正常情况std::queue
下只有很少的可能操作,在我看来双向链表应该更有效率,因为内部需要进行的管道更少。
那么为什么std::queue
使用std::deque
默认实现,而不是std::list
?