C++11 より前の時代、多くの本の著者は、deque
ランダム アクセスで動的にサイズ変更されたコンテナーが必要な状況で for を使用することを推奨していました。これは、一部には、 がdeque
よりも汎用性の高いデータ構造に移動vector
したという事実によるものでしたが、vector
C++11 以前の世界では、"shrink toフィット。" ブラケットdeque
演算子と反復子を介した要素への間接アクセスのオーバーヘッドの増加vector
は、再割り当てのオーバーヘッドの増加に含まれているようです。
一方で、変わらないものもあります。vector
再割り当てには引き続き幾何学的 (つまり、サイズ * 係数) スキームを使用し、すべての要素を新しく割り当てられたスペースにコピー (または可能であれば移動) する必要があります。vector
前部および/または中間部での要素の挿入/削除に関しては、以前と同じです。一方、参照の局所性は向上しますが、使用されるブロックdeque
が「かなり大きな」サイズである場合、キャッシュに関する利点は多くのアプリで主張できます。
したがって、私の質問は、C++ 11 に伴う変更を考慮してdeque
、動的にサイズ設定された/ランダムアクセスのニーズに対応するための最初の選択肢のコンテナーであり続ける必要があるかどうかです。