Moron / Aryabhatta tiene razón, pero un poco más de detalle puede ser útil.
La cola y la pila son contenedores de nivel superior que deque, vector o list. Con esto, quiero decir que puede crear una cola o apilar los contenedores de nivel inferior.
Por ejemplo:
std::stack<int, std::deque<int> > s;
std::queue<double, std::list<double> > q;
Construirá una pila de entradas usando una deque como contenedor subyacente y una cola de dobles usando una lista como contenedor subyacente.
Puede pensar s
en una deque restringida y q
como una lista restringida.
Todo lo que se necesita es que el contenedor de nivel inferior implemente los métodos que necesita el contenedor de nivel superior. Estos son back()
, push_back()
y pop_back()
para la pila y front()
, back()
, push_back()
, ypop_front()
para la cola.
Consulte pila y cola para obtener más detalles.
Con respecto a la deque, es mucho más que una cola donde se puede insertar en ambos extremos. En particular, tiene acceso aleatorio operator[]
. Esto lo hace más como un vector, pero un vector donde puede insertar y eliminar al principio con push_front()
y pop_front()
.
Consulte la etiqueta para obtener más detalles.
stack
yqueue
simplemente restringirdeque
su conjunto completo de funciones.Queue
: puede insertar solo en un extremo y quitar del otro.Deque
: puede insertar y quitar de ambos extremos.Entonces, usando a
Deque
, puede modelarQueue
tanto a como aStack
.Sugerencia:
Deque
es la abreviatura de " D OBLE e nded Que ue".fuente
queue
no satisface los requisitos de un contenedor. No tiene iteradores, ¡por el amor de Dios!std::stack
utiliza astd::deque
como contenedor de respaldo de forma predeterminada. Especulo sobre la razón aquí: stackoverflow.com/questions/102459/… (básicamente, el crecimiento de adeque
es una sobrecarga baja).deque
es una plantilla de contenedor. Satisface los requisitos para una secuencia con iteradores de acceso aleatorio, muy parecido a unvector
.queue
no es un contenedor en absoluto, es un adaptador . Contiene un contenedor y proporciona una interfaz diferente y más específica. Úseloqueue
cuando desee recordar (o recordar) para evitar operaciones además depush[_back]
ypop[_front]
,front
yback
,size
yempty
. ¡No puedes mirar los elementos dentro delqueue
además del primero y el último, en absoluto!fuente
En la biblioteca de C ++, ambos
std::stack
ystd::queue
se implementan como adaptadores de contenedor . Eso significa que proporcionan la interfaz de una pila o una cola respectivamente, pero ninguno es realmente un contenedor en sí mismo. En su lugar, usan algún otro contenedor (por ejemplo,std::deque
ostd::list
para almacenar realmente los datos), y lastd::stack
clase solo tiene un poco de código para traducirpush
ypop
haciapush_back
ypop_back
(ystd::queue
hace aproximadamente lo mismo, pero usandopush_back
ypop_front
).fuente
queue
, VS también parece asignarpop
apop_front
, ypush
quepush_back
, por lo que supongo que esto depende de la implementación.pop_front
ypush_back
son lo que se requiere. Mis disculpas.Una deque es una cola de dos extremos, que permite una fácil inserción / extracción desde cualquier extremo. Las colas solo permiten la inserción en un extremo y la recuperación del otro.
fuente
deque admite insertar / pop desde atrás y adelante
la cola solo admite insertar en la parte posterior y pop desde el frente. Ya sabes, un FIFO (primero en entrar, primero en salir).
fuente
Un deque tiene dos extremos. Una cola no lo es.
fuente
por Mike Anderson aquí:
https://www.quora.com/What-is-the-difference-between-a-priority-queue-and-a-queue
fuente
En deque (cola de dos extremos) El elemento se puede insertar desde atrás y quitar de forma posterior (igual que la pila), pero en la cola solo se puede quitar desde el frente.
fuente