web-dev-qa-db-fra.com

c ++ deque vs queue vs pile

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?

64
skydoor

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. 

57
Andrew Stein

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". 

34
Aryabhatta

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!

28
Potatoswatter

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).

19
Jerry Coffin

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.

5
Michael Hackner

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).

4
rmn

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.

0
Nagappa

Un deque est double. Une file d'attente n'est pas.

0
Skilldrick

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

0
user7282461