Moron / Aryabhatta ma rację, ale trochę więcej szczegółów może być pomocnych.
Kolejka i stos są kontenerami wyższego poziomu niż deque, vector czy lista. Rozumiem przez to, że możesz zbudować kolejkę lub składować z kontenerów niższego poziomu.
Na przykład:
std::stack<int, std::deque<int> > s;
std::queue<double, std::list<double> > q;
Zbuduje stos ints przy użyciu deque jako podstawowego kontenera i kolejki double przy użyciu listy jako podstawowego kontenera.
Możesz myśleć o s
ograniczonym deque i q
jako o ograniczonej liście.
Wszystko, co jest potrzebne, to aby kontener niższego poziomu implementował metody wymagane przez kontener wyższego poziomu. Są back()
, push_back()
i pop_back()
na stosie i front()
, back()
, push_back()
, i pop_front()
do kolejki.
Więcej szczegółów znajdziesz w sekcji stos i kolejka .
Jeśli chodzi o deque, jest to znacznie więcej niż kolejka, w której można wstawić na obu końcach. W szczególności ma dostęp losowy operator[]
. To sprawia, że bardziej przypomina wektor, ale wektor, w którym można wstawiać i usuwać na początku za pomocą push_front()
i pop_front()
.
Szczegółowe informacje można znaleźć w deque .
stack
iqueue
po prostu ograniczdeque
jego pełny zestaw funkcji.Queue
: można włożyć tylko na jednym końcu i wyjąć na drugim.Deque
: możesz wkładać i wyjmować z obu końców.Więc używając a
Deque
, możesz modelować zarówno a,Queue
jak iStack
.Podpowiedź:
Deque
to skrót od " D ouble e wyładowanych que ue".źródło
queue
nie spełnia wymagań kontenera. Nie ma iteratorów, na litość boską!std::stack
używastd::deque
jako kontenera zapasowego. Spekuluję na temat powodu tutaj: stackoverflow.com/questions/102459/… (zasadniczo, że rosnące Adeque
to niskie obciążenie).deque
to szablon kontenera. Spełnia wymagania dla sekwencji z iteratorami o swobodnym dostępie, podobnie jak plikvector
.queue
nie jest w ogóle pojemnikiem, jest adapterem . Zawiera kontener i zapewnia inny, bardziej szczegółowy interfejs. Użyj,queue
gdy chcesz zapamiętać (lub przypomnieć), aby uniknąć operacji pozapush[_back]
ipop[_front]
,front
iback
,size
iempty
. W ogóle nie możesz patrzeć na elementy wewnątrzqueue
oprócz pierwszego i ostatniego!źródło
W bibliotece C ++ oba elementy
std::stack
istd::queue
są zaimplementowane jako adaptery kontenerów . Oznacza to, że zapewniają interfejs odpowiednio stosu lub kolejki, ale żaden z nich nie jest sam w sobie kontenerem. Zamiast tego używają innego kontenera (np.std::deque
Lubstd::list
faktycznie do przechowywania danych), astd::stack
klasa ma tylko niewielki fragment kodu do przetłumaczeniapush
ipop
dopush_back
ipop_back
(istd::queue
robi mniej więcej to samo, ale używapush_back
ipop_front
).źródło
queue
VS wydaje się również mapapop
dopop_front
, ipush
dopush_back
, więc myślę, że jest to zależne od implementacji.pop_front
ipush_back
są tym, czego potrzebujesz. Przepraszam.Deque to kolejka dwustronna, która umożliwia łatwe wstawianie / wyjmowanie z każdego końca. Kolejki pozwalają tylko na wstawianie na jednym końcu i pobieranie z drugiego.
źródło
deque obsługuje insert / pop z tyłu iz przodu
Kolejka obsługuje tylko wkładanie do tyłu i wyskakiwanie od przodu. Wiesz, FIFO (pierwszy wchodzi, pierwszy wychodzi).
źródło
Deque jest dwustronny. Kolejka nie jest.
źródło
Mike Anderson tutaj:
https://www.quora.com/What-is-the-difference-between-a-priority-queue-and-a-queue
źródło
In deque (podwójna kolejka) Element można wstawić od tyłu i usunąć z tyłu (tak samo jak stos), ale w kolejce usuwać tylko od przodu.
źródło