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