0

リスト内のものをインデックスで参照するプロトコルを使用しています。それらを保存する自然な方法はベクトルであるため、一定時間でランダムアクセスできます。しかし、本質的に、ベクトルの先頭には、挿入や削除を含む多くの操作があります。インデックスが低いほど、いじりやすくなります。その結果、ベクトルの残りの部分が大量にコピーされます。

コンテンツのシフトを最小限に抑えるために、プロトコル インデックスをより高いベクトル インデックス (つまり、より高いアドレス) に配置するという逆の方法で格納したいと考えていますが、プロトコル インデックスによって透過的に要素にランダム アクセスすることもできます。理想的なコンテナーは、ポインター演算などを除いて、std::vector のドロップイン置換です。私はまだポインター演算が必要ですが、逆順を自分で処理できます。

そのようなクラスはありますか?

たぶん、私が見つけられなかったブーストコンテナか、あいまいなポリシーですか?

編集:実際には、indexの0だけでなく index の後にスペースを予約する一種のベクトルを使用できることに気づきましたlength-1。私が思ったように、Dequeはそのように構築されていません。代わりにメモリのチャンクを使用して、ポインタ演算を防ぎます。

4

1 に答える 1

1

あなたの説明から、アイテムがベクトルの前に挿入および削除され、ベクトルの残りの部分がシフトするように聞こえます。もしそうなら、特定のインデックスにとどまっているアイテムに依存していないことを意味します。並べ替え順序を維持するために、なぜ挿入と削除がベクトルの前にあるのかという疑問が生じます。

C++ 標準ライブラリには、対数時間の挿入と削除で並べ替え順序を維持する多くのコンテナーがありますstd::multi_set

挿入と削除が非常にローカライズされているように聞こえる場合 (ただし、実際には明確ではありません)、ギャップ バッファーとも呼ばれるカーソル ギャップ構造を使用して、挿入と削除を一定の時間に減らし、一定に保つことができます。時間のインデックス。コストの 1 つは、インデックス作成に追加の間接性が含まれることです。ただし、これは時期尚早の最適化である可能性があるためパフォーマンスが重要な場合は測定してください。

于 2013-01-12T09:12:18.157 に答える