La file d'attente et la pile sont des structures largement mentionnées. Cependant, en file d'attente, vous pouvez le faire de deux manières:
#include <queue>
#include <deque>
mais pour la pile, vous ne pouvez le faire comme ça
#include <stack>
Ma question est la suivante: quelle est la différence entre queue et deque, pourquoi deux structures proposées? Pour la pile, toute autre structure pourrait être incluse?
Moron/Aryabhatta est correct, mais un peu plus de détails peut être utile.
La file d'attente et la pile sont des conteneurs de niveau supérieur à celui de deque, de vecteur ou de liste. J'entends par là que vous pouvez créer une file d'attente ou une pile à partir des conteneurs de niveau inférieur.
Par exemple:
std::stack<int, std::deque<int> > s;
std::queue<double, std::list<double> > q;
Construira une pile d'ints utilisant un deque comme conteneur sous-jacent et une file d'attente de doublons utilisant une liste comme conteneur sous-jacent.
Vous pouvez considérer s
comme un Deque restreint et q
comme une liste restreinte.
Il suffit que le conteneur de niveau inférieur implémente les méthodes requises par le conteneur de niveau supérieur. Il s'agit de back()
, Push_back()
et pop_back()
pour la pile et de front()
, back()
, Push_back()
et pop_front()
pour la file d'attente.
Voir stack et queue pour plus de détails.
En ce qui concerne le deque, c'est beaucoup plus qu'une file d'attente où vous pouvez insérer des deux côtés. En particulier, il a l'accès aléatoire operator[]
. Cela le rend plus comme un vecteur, mais un vecteur où vous pouvez insérer et supprimer au début avec Push_front()
et pop_front()
.
Voir deque pour plus de détails.
Queue
: vous pouvez insérer uniquement à une extrémité et retirer de l'autre.
Deque
: vous pouvez insérer et supprimer des deux côtés.
Donc, en utilisant un Deque
, vous pouvez modéliser un Queue
ainsi qu'un Stack
.
Allusion:Deque
est l'abréviation de "Double e nded que ue".
deque
est un modèle de conteneur. Il satisfait aux conditions requises pour une séquence avec des itérateurs à accès aléatoire, un peu comme un vector
.
queue
n'est pas du tout un conteneur, c'est un adaptateur . Il contient un conteneur et fournit une interface différente, plus spécifique. Utilisez queue
lorsque vous voulez vous rappeler (ou rappeler) pour éviter des opérations autres que Push[_back]
et pop[_front]
, front
et back
, size
et empty
. Vous ne pouvez pas regarder les éléments à l'intérieur de la queue
en dehors du premier et du dernier, du tout!
std::stack
et std::queue
sont tous deux implémentés en tant que conteneur adapters . Cela signifie qu’ils fournissent respectivement l’interface d’une pile ou d’une file d’attente, mais ils ne constituent pas non plus un conteneur en soi. Au lieu de cela, ils utilisent un autre conteneur (par exemple, std::deque
ou std::list
pour stocker les données), et la classe std::stack
a juste un tout petit peu de code pour traduire Push
et pop
en Push_back
et pop_back
(et std::queue
fait la même chose, mais en utilisant Push_back
et pop_front
).
Un deque est une file d'attente à deux extrémités, ce qui permet une insertion/un retrait facile de l'une ou l'autre extrémité. Les files d'attente ne permettent que l'insertion à une extrémité et la récupération à partir de l'autre.
soutien deque insertion/pop de l'arrière et l'avant
la file d’attente ne prend en charge que les insertions vers l’arrière et les pop-up de l’avant. Vous savez, un FIFO (premier entré premier sorti).
En deque (file d'attente double) L'élément peut être inséré de l'arrière et supprimer le formulaire en arrière (Identique à la pile), mais dans la file d'attente, ne l'enlever que de l'avant.
Un deque est double. Une file d'attente n'est pas.
La sortie de file d'attente prioritaire se produit selon une comparaison d'ordre (priorité) et non l'ordre de mise en file d'attente.
Par exemple, vous pouvez stocker les événements chronométrés dans un emplacement où vous souhaitez extraire en premier l'événement le plus proche et interroger son heure planifiée afin que vous puissiez dormir jusqu'à ce point.
Les files d'attente prioritaires sont souvent implémentées à l'aide de tas.
par Mike Anderson ici:
https://www.quora.com/What-is-the-difference-between-a-priity-queue-et-a-queue