アクセスの複雑さ、サイズ変更時の再割り当てなどに関しては、STL ベクトルに似たものが必要です。任意のインデックス範囲をサポートする必要があります。 10. push_front を効率的にできるようにしたい。また、双方向のサイズ変更が必要です...
私は自分でこのようなものを書くことができることを知っていますが、これをサポートするすでに書かれたライブラリがあれば教えてください.
Deque は、最後にランダム アクセスと効率的な挿入をサポートし、最初の効率的な挿入もサポートするという点で、ベクトルに非常によく似ています。
Map は、任意のキーに基づくアクセスをサポートしています。任意の範囲を指定したり、まばらに入力された配列を指定したりすることもできます。コレクションの反復は遅いです。
順序付けされていないマップ (tr1) は、より優れた反復をサポートする点を除いて map に似ています。
一般的な経験則として、ベクターを使用し (この場合は、必要な動作に適応させます)、ベクターが速度低下の原因であるという証拠がある場合にのみ変更します。
あなたが望むものとベクトルの唯一の違いは、要素にアクセスするために必要なオフセットです。双方向のサイズ変更の意味がわからなかった場合を除きます。
ほら、両端ベクトル
http://dl.dropbox.com/u/9496269/devector.h
利用方法:
の前にメモリを予約するにbegin()
は、使用しますreserve(new_back_capacity, new_front_capcity);
を使用する場合を除きpush_front()
、フロント容量は常に維持されます。pop_front()
squeeze()
squeeze()
未使用のメモリをすべてフラッシュします
デフォルトnamespace; stdext
概念:
ほとんどの場合、push_front と同等です::std::vector
が、push_front の機能があります
と比較してパフォーマンスの違いはありません::std::vector
(とは異なります::std::deque
)
と比較して 4 バイトのオーバーヘッド::std::vector
2 方向のサイズ変更などが必要な場合は、0 と正の値用と負の値用の 2 つのベクトルを持つ独自のベクトル クラスを作成できます。
次に、一般的な関数を実装して新しい関数を追加し (例: 負のインデックス ベクトルに追加する push_begin)、内部の対応するベクトルを更新します。