web-dev-qa-db-ja.com

c ++ deque vsキューvsスタック

キューとスタックは広く言及されている構造です。ただし、C++では、キューの場合、次の2つの方法で実行できます。

#include <queue>
#include <deque>

しかし、スタックの場合は、このようにしかできません

#include <stack>

私の質問は、キューとデキューの違いは何ですか、なぜ2つの構造が提案されたのですか?スタックの場合、他の構造を含めることができますか?

72
skydoor

Moron/Aryabhattaは正しいですが、もう少し詳細が役立つかもしれません。

キューとスタックは、deque、vector、またはlistよりも高レベルのコンテナーです。これにより、低レベルのコンテナからキューを構築したりスタックしたりできるようになります。

例えば:

_  std::stack<int, std::deque<int> > s;
  std::queue<double, std::list<double> > q;
_

基になるコンテナとしてdequeを使用してintのスタックを構築し、基になるコンテナとしてリストを使用してdoubleのキューを構築します。

sは制限付き両端キュー、qは制限付きリストと考えることができます。

必要なのは、下位コンテナが上位コンテナに必要なメソッドを実装することだけです。これらは、スタックのback()Push_back()、およびpop_back()、およびfront()back()Push_back()、およびキューのpop_front()

詳細については、 stack および queue を参照してください。

両端キューに関しては、両端に挿入できるキュー以上のものです。特に、_operator[]_のランダムアクセスがあります。これにより、ベクトルのようになりますが、Push_front()およびpop_front()で先頭から挿入および削除できるベクトルになります。

詳細については、 deque を参照してください。

62
Andrew Stein

Queue:一方の端にのみ挿入し、もう一方の端から削除できます。

Deque:両端から挿入および削除できます。

したがって、Dequeを使用すると、QueueだけでなくStackもモデル化できます。

ヒント:
Dequeは「[〜#〜] d [〜#〜] ouble e nded que = ue」。

38
Aryabhatta

dequeはコンテナテンプレートです。 vectorによく似た、ランダムアクセス反復子を使用したシーケンスの要件を満たします。

queueはコンテナではなく、アダプタです。コンテナが含まれており、より具体的な別のインターフェイスを提供します。 queueを使用して、Push[_back]およびpop[_front]frontおよびbacksizeおよびempty。最初と最後以外のqueue内の要素はまったく見ることができません!

31
Potatoswatter

C++ライブラリでは、std::stackstd::queueの両方がコンテナアダプタとして実装されます。つまり、それぞれスタックまたはキューのインターフェイスを提供しますが、どちらも実際にはコンテナではありません。代わりに、他のコンテナ(たとえば、std::dequeまたはstd::listを使用して実際にデータを保存します)を使用し、std::stackクラスにはPushを変換するための小さなコードがありますおよびpopからPush_backおよびpop_back(およびstd::queueはほぼ同じですが、Push_backおよびpop_frontを使用します)。

21
Jerry Coffin

Dequeは両端キューで、両端から簡単に挿入/削除できます。キューでは、一方の端での挿入と他方の端からの取得のみが許可されます。

5
Michael Hackner

dequeは、前後からの挿入/ポップをサポートします

キューは背面への挿入のみをサポートし、前面からポップします。 FIFO(先入れ先出し)。

4
rmn

Deque(double ends queue)では、要素を後ろから挿入して、フォームback(スタックと同じ)を削除できますが、キューではフロントからのみ削除できます。

0
Nagappa

両端キューは両端があります。キューはそうではありません。

0
Skilldrick

優先キューのデキューは、エンキューの順序ではなく、何らかの順序(優先順位)の比較に従って行われます。

たとえば、最も近いイベントを最初に引き出し、スケジュールされた時間を照会する場所に時間指定されたイベントを保存して、その時点までスリープできるようにします。

多くの場合、優先度キューはヒープを使用して実装されます。

ここにマイク・アンダーソン:
https://www.quora.com/What-is-the-difference-between-a-priority-queue-and-a-queue

0
user7282461