0

私は独自の「配列の構造体」コーディングを始めましたが、メモリに制約のあるハードウェアで強力なデータ変換を行うためのライブラリまたはテンプレートが既に存在することを誰かが知っているかどうか疑問に思いました。

私が探しているのは、同期点まで挿入をキューに入れ、反復の途中で「削除」できる一種の「メモリ内」コンテナだと思います。実際の削除である必要はありません (物を移動するオーバーヘッドがあります)。削除済みとしてマークしても問題ありません。また、コンテナは、キャッシュ ウォーミングなどのパフォーマンスのために、ほとんどの場合連続している必要があります。完全に連続するのではなく、連続するブロックも問題ありませんが、通常、配列は非常に小さな要素で構成されているため、リンク リスト ベースのコンテナーは、メモリや速度のためにそれを削減することはできません。

これが、コンテナが主キーでソートされたテーブルのようなものになるため、ある種のテーブル クラスが適合すると考える理由です。

意味はありますが、std::vector を使用するという考えは、反復中に何かを削除すると、配列の末尾と先頭 (カウント) へのアクセスでキャッシュが台無しになるため、実際には不可能です。

また、複数の反復子が同じデータに対して操作できない理由はないため、swap as delete のようなことを行うと、他の反復子が特定の要素をスキップすることになります。これが、挿入をキューに入れることに言及する理由です。

挿入と削除はコンテナーの形状を変更するため、同期操作で処理できると想定していますが、現在のコンテンツの反復中に挿入と削除のアクションがキューに入れられる可能性があります。

4

1 に答える 1

3

そして反復の途中で「削除」します。実際の削除である必要はありません

を使用できますがstd::vector、途中で消去する代わりに、単純に最後の要素と交換してから消去します。

#include <algorithm>

template <typename T>
void cheap_erase(std::vector<T>& vec, size_t index)
{
    using std::swap;
    swap(vec[index], vec.back());
    vec.pop_back();
}
于 2010-06-29T09:51:48.873 に答える