コンテナをスタックで使用するために必要な操作は次のとおりです。
- 戻る()
- push_back()
- pop_back()
デフォルトのコンテナーがベクトルではなく両端キューであるのはなぜですか?
push_front() が効率的な操作になるように、再割り当てを deque して front() の前に要素のバッファーを与えないでください。これらの要素は、スタックのコンテキストで使用されることはないため、無駄になっていませんか?
ベクトルの代わりにこの方法で両端キューを使用してもオーバーヘッドがない場合、priority_queue のデフォルトが両端キューではないのはなぜですか? (priority_queue には、front()、push_back()、および pop_back() が必要です - 基本的にスタックの場合と同じです)
以下の回答に基づいて更新されました。
deque が通常実装される方法は、固定サイズ配列の可変サイズ配列であるようです。これにより、ベクトル (再割り当てとコピーが必要) よりも高速に成長するため、要素の追加と削除がすべてのスタックのようなものでは、おそらく deque の方が適しています。
削除と挿入のたびに pop_heap() または push_heap() を実行する必要があるため、priority_queue には大量のインデックス作成が必要です。とにかく、要素の追加はまだ償却定数であるため、これはおそらくベクトルをより良い選択にします。