Moron / Aryabhatta ist korrekt, aber ein bisschen mehr Details können hilfreich sein.
Warteschlange und Stapel sind Container höherer Ebene als Deque, Vektor oder Liste. Damit meine ich, dass Sie eine Warteschlange oder einen Stapel aus den Containern der unteren Ebene erstellen können.
Zum Beispiel:
std::stack<int, std::deque<int> > s;
std::queue<double, std::list<double> > q;
Erstellt einen Stapel von Ints unter Verwendung einer Deque als zugrunde liegenden Container und einer Warteschlange von Doubles unter Verwendung einer Liste als zugrunde liegenden Container.
Sie können sich s
eine eingeschränkte Deque und q
eine eingeschränkte Liste vorstellen .
Alles, was notwendig ist, ist, dass der Container der unteren Ebene die Methoden implementiert, die der Container der höheren Ebene benötigt. Diese sind back()
, push_back()
und pop_back()
für Stapel und front()
, back()
, push_back()
und pop_front()
für die Warteschlange.
Weitere Informationen finden Sie unter Stapel und Warteschlange .
In Bezug auf die Deque ist es viel mehr als eine Warteschlange, in die Sie an beiden Enden einfügen können. Insbesondere hat es den wahlfreien Zugriff operator[]
. Dies macht es eher zu einem Vektor, aber zu einem Vektor, in den Sie am Anfang mit push_front()
und einfügen und löschen können pop_front()
.
Siehe deque für Details.
stack
undqueue
nurdeque
von seinem vollen Funktionsumfang einschränken .Queue
: Sie können nur an einem Ende einfügen und am anderen entfernen.Deque
: Sie können an beiden Enden einfügen und entfernen.Mit a
Deque
können Sie also sowohl aQueue
als auch a modellierenStack
.Hinweis:
Deque
steht für " D ouble e nded que ue".quelle
queue
erfüllt nicht die Anforderungen eines Containers. Es gibt keine Iteratoren, um Himmels willen!std::stack
standardmäßig astd::deque
als Hintergrundcontainer. Ich spekuliere hier über den Grund: stackoverflow.com/questions/102459/… (im Grunde genommen ist das Wachsen von a eindeque
geringer Overhead).deque
ist eine Containervorlage. Es erfüllt die Anforderungen für eine Sequenz mit Iteratoren mit wahlfreiem Zugriff, ähnlich wie avector
.queue
ist überhaupt kein Container, es ist ein Adapter . Es enthält einen Container und bietet eine andere, spezifischere Schnittstelle. Verwendenqueue
Sie diese Option, wenn Sie sich erinnern (oder daran erinnern) möchten, um Operationen nebenpush[_back]
undpop[_front]
,front
undback
,size
und zu vermeidenempty
. Sie können Elementequeue
neben dem ersten und dem letzten überhaupt nicht betrachten!quelle
In der C ++ Bibliothek, die beide
std::stack
undstd::queue
werden als Container umgesetzt Adapter . Das heißt, sie stellen die Schnittstelle eines Stapels bzw. einer Warteschlange bereit, aber keiner ist wirklich ein Container für sich. Stattdessen verwenden sie einen anderen Container (z. B.std::deque
oderstd::list
um die Daten tatsächlich zu speichern), und diestd::stack
Klasse verfügt nur über ein kleines Stück Code zum Übersetzenpush
undpop
zupush_back
undpop_back
(undstd::queue
tut ungefähr das Gleiche, verwendet jedochpush_back
undpop_front
).quelle
queue
scheint VS auch zur Kartepop
zupop_front
undpush
zupush_back
, so dass ich denke , das ist die Umsetzung abhängig ist.pop_front
undpush_back
sind was erforderlich. Entschuldigen Sie.Eine Deque ist eine Warteschlange mit zwei Enden, die ein einfaches Einfügen / Entfernen an beiden Enden ermöglicht. Warteschlangen ermöglichen nur das Einfügen an einem Ende und das Abrufen vom anderen.
quelle
deque unterstützt Insert / Pop von hinten und vorne
Die Warteschlange unterstützt nur das Einfügen nach hinten und das Einfügen von vorne. Sie wissen, ein FIFO (first in first out).
quelle
von Mike Anderson hier: https://www.quora.com/Was-ist-der- Unterschied zwischen-a-priority-queue-and-a-
queue
quelle
In deque (Warteschlange mit zwei Enden) Das Element kann von hinten eingefügt und vom Formular entfernt werden (wie Stapel). In der Warteschlange kann es jedoch nur von vorne entfernt werden.
quelle
Eine Deque hat zwei Enden. Eine Warteschlange ist nicht.
quelle