2

stack/queue は、デフォルトの基になるコンテナーとして deque を使用するコンテナー アダプターであることを知っています。しかし、deque をスタックまたはキューとして使用できるのに、なぜ手間がかかるのでしょうか? また、deque 以外のさまざまな基礎となるコンテナーでスタック/キューを使用する必要がある状況もわかりません。さらに、スタック/キュー (基礎となる両端キューを含む) は、両端キューよりも少し多くのメモリを消費しますか? (データ構造はより複雑なので、そうしなければなりませんよね?)。もしそうなら、データが巨大な場合、違いは大きいですか?

編集:この質問が重複としてマークされ、 c++ deque vs queue vs stackにリンクされたのはなぜですか? deque と queue の違いについては質問しませんでした (既に知っているように)。クラススタック/キューを使用する代わりにスタック/キューとして両端キューを使用しない理由と、メモリ消費に関するその他の質問をしました。

4

2 に答える 2

4

スタックまたはキューが必要な場合は、正しいコンテナを使用してください。dequeこれらは、途中で要素を追加または削除したり、コンテナを反復処理したりするなど、で許可される特定の操作を防ぐように設計されています。このような操作は、厳密なスタックまたはキューの実装ではまったく受け入れられません。

通常のキューとして使用するつもりだったことdequeわかっているので、a を使用しても問題ないと思うかもしれません。しかし、数年後に別の誰かがやって来て、あなたのプロジェクトが大幅に成長したとき、その人にはまったくわからないかもしれません。他の問題をハッキングできるという理由だけで非キュー操作を行うと、プログラムがうっかりして微妙な方法で壊れてしまい、数週間、数か月、または数年間検出されない可能性があります。

于 2013-11-28T03:37:00.000 に答える
2

コンテナ アダプタは、そのインターフェイス用に用意されています。はい、std::deque代わりに直接使用できますが、ほとんどの場合、基になるコンテナーについて心配する必要はなく、スタック/キューのインターフェイス (動作) があります。アダプターはコンテナーを適応させて特定の動作を提供し、データ構造 (つまり、スタックまたはキュー) の観点から考えるのを容易にします。stackまたはqueueコンテナー アダプターの場合、インターフェイスは、基になるコンテナーが提供するものの制限されたサブセットです。これにより、エラーや意図しない方法でのコンテナーの使用も防ぐことができます。

于 2013-11-28T03:35:00.457 に答える