私が理解している限り、dequeの背後にある動機は、ランダムアクセスコンテナに効率的なを提供することpush_front
です。
dequeと比較した場合のvectorの一般的に引用される利点には、より高速なトラバーサルとat()
が含まれますが、連続したメモリが保証されるため、ほとんどの場合C互換性があります。Dequeは、それぞれが多数の値を保持するメモリのチャンクのコレクションであるため、そうではありません。
よくわかりません。dequeがベクトルのように構築されていないのに、0
インデックスの後に予約されているメモリに加えて、インデックスの前にメモリが予約されているのはなぜsize-1
ですか?これにより、連続したメモリが保証され、効率が向上push_front
し、イテレータを逆参照する際の追加の間接参照が回避されます。
挿入中のシフトを最小限に抑えるために、シフトされる含まれる値は挿入ポイントによって異なります。n
の前にあるインデックスに挿入する場合は、値を左size()/2
にシフトします。n
それ以外の場合は、の後に値を右にシフトしますn
。
dequeが値の配列のコレクションであり、1つの大きな配列ではないほど重要であることが、私が見逃したことは何ですか?