Dado que las únicas operaciones necesarias para que un contenedor se utilice en una pila son:
- espalda()
- 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 sobrecarga para usar una deque de esta manera en lugar de un vector, ¿por qué el valor predeterminado de priority_queue es un vector y no una deque también? (priority_queue requiere front (), push_back () y pop_back (), esencialmente lo mismo que para la pila)
Actualizado según las respuestas a continuación:
Parece que la forma en que deque se implementa generalmente 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 se trata de agregar y eliminar elementos, deque es probablemente una mejor opción.
Priority_queue requiere una indexación en gran medida, 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 allí, ya que agregar un elemento aún se amortiza como constante de todos modos.