¿Por qué std :: stack usa std :: deque por defecto?

Dado que las únicas operaciones requeridas para que un contenedor se use en una pila son:

atrás()hacer retroceder()pop_back ()

¿Por qué el contenedor predeterminado es un deque en lugar de un vector?

¿No deque las reasignaciones dan un búfer de elementos antes de front () para que push_front () sea una operación eficiente? ¿No se desperdician estos elementos, ya que nunca se utilizarán en el contexto de una pila?

Si no hay una sobrecarga para usar un deque de esta manera en lugar de un vector, ¿por qué el valor predeterminado para priority_queue un vector no es un deque también? (priority_queue requiere front (), push_back () y pop_back () - esencialmente lo mismo que para la pila)

Actualizado basado en las respuestas a continuación:

Parece que la forma en que usualmente se implementa el deque es una matriz de tamaño variable de matrices de tamaño fijo. Esto hace que el crecimiento sea más rápido que un vector (que requiere reasignación y copia), por lo que para algo como una pila que consiste en agregar y eliminar elementos, deque es probablemente una mejor opción.

priority_queue requiere una gran indexación, ya que cada eliminación e inserción requiere que ejecute pop_heap () o push_heap (). Esto probablemente hace que el vector sea una mejor opción ya que la adición de un elemento todavía se amortiza de manera constante.

Respuestas a la pregunta(2)

Su respuesta a la pregunta