Dado que las únicas operaciones necesarias para un contenedor para ser utilizado en una pila son:¿Por qué std :: stack usa std :: deque de forma predeterminada?
- atrás()
- push_back()
- pop_back()
¿Por qué es el contenedor predeterminado ¿Es un deque en lugar de un vector?
Las reasignaciones Do not deke dan un búfer de elementos antes del frente() para que push_front() sea una operación eficiente? ¿No se desperdician estos elementos ya que nunca se usarán en el contexto de una pila?
Si no hay sobrecarga para usar un deque de esta forma en lugar de un vector, ¿por qué el valor predeterminado para priority_queue es un vector y no un deque también? (Priority_queue requiere frontal(), push_back(), y pop_back() - esencialmente el mismo que el de pila)
actualiza basándose en las respuestas a continuación:
Parece que la forma deque es generalmente implementado es una matriz de tamaño variable de matrices de tamaño fijo. Esto hace que crezca más rápido que un vector (que requiere reasignación y copia), por lo que para algo así como una pila que se trata de agregar y eliminar elementos, deque es probablemente una mejor opción.
prioridad_queue requiere mucha indexación, ya que cada eliminación e inserción requiere ejecutar pop_heap() o push_heap(). Esto probablemente hace que el vector sea una mejor opción allí ya que agregar un elemento todavía se amortiza de todos modos.
El razonamiento en su 'actualización' no es del todo correcto. el vector normalmente agrega y elimina elementos del extremo _faster_ que deque. deque es más rápido para _crear memoria_, no para empujar elementos. –