C++において、
キューでできることはベクターですべて実装できますが、
ベクターにできてキューにできないことは山ほどあります。
キューを使う意味はあるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答4件
0
vectorは末尾挿入/末尾削除が高速。
queueは末尾挿入/先頭削除が高速。
投稿2022/02/01 11:58
総合スコア16612
0
vectorで実装できるというのがqueue.pushの代わりにvector.push_backを使ってqueue.popの代わりにvector.erase(vector.begin())を使うという意味であれば、vectorは先頭の要素を効率よく削除できないので大きなデータを扱う場合にqueueのほうが圧倒的に早く動きます。
リングバッファのような効率のいい方法と組み合わせてvectorをキューのように使うという意味であれば効率の面では差はなくなりますが、中に入れているオブジェクトのコンストラクターやデストラクターの呼び出しタイミングまでqueueのように制御しようと思ったらわざわざやろうという気にはならないぐらいめんどくさいはずです。
多くの用途でvectorでも実装可能であっても、すべての用途でvectorを使うというのは難しいでしょう。
投稿2022/02/01 11:15
総合スコア2052
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C++標準ライブラリが提供するコンテナ(vector
, deque
, queue
など)を比較紹介する記事「[C++] STLの型の使い分け」をお勧めしておきます。
キューでできることはベクターですべて実装できますが、ベクターにできてキューにできないことは山ほどあります。
キューを使う意味はあるのでしょうか?
あります。
「ベクターにできてキューにできないことは山ほどある」は、別の解釈をすると「キューとしてしか機能しない/間違いを起こさないよう保護されている」と言い換えられます。
プログラミング言語やライブラリには、「実現/表現できることが多いこと」「間違った/危険なことが起こらないようなサポート」の2側面があります。
プログラム中で「キュー」が必要なのであれば、専用クラスを利用したほうが好ましいです。
投稿2022/02/02 02:51
総合スコア6191
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
std::queue のコンテナにあえて vector を使うとかいう話でもないなら,
queue であることに都合のよい形の実装を用いる(std::queueならデフォルトは deque である)わけで,そこに差ができるよね.
投稿2022/02/01 10:45
編集2022/02/01 10:46総合スコア12151
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。