0

グリッドのサイズは開始時にわかります (ただし、プログラムを開始するたびに異なります)。ただし、各セルの DEPTH は単なる値ではなく、実行時に絶えず変化するオブジェクトの集団です。

Q: これを実装する最も推奨される (効率的で保守が容易で、ユーザー エラーが発生しにくい) 方法は何ですか?

  • これはある種の標準的なベクトル ポインタの 2D 配列ですか?
  • 3D ベクトル配列ですか?
  • それはリンクされたリストの2D配列ですか、それともバイナリツリーですか(バイナリツリーは、連続的な削除と挿入のノード体操のために複雑なオーバーヘッドを追加すると考えています)
  • それは他のカスタムデータ構造ですか?

ここに画像の説明を入力

4

1 に答える 1

2

最適なキャッシュの局所性を得るには、1D 配列を使用します。vectorこれならAでいいです。

std::vector<int> histdata( width * height );

行をすばやくインデックス化する必要がある場合は、それを指す何かを作成します。

std::vector<int*> histogram( height );
histogram[0] = &histdata[0];
for( int i = 1; i < height; i++ ) {
    histogram[i] = histogram[i-1] + width;
}

これで、1D ベクトルに格納された 2D ヒストグラムができました。次のようにアクセスできます。

histogram[row][col]++;

これらすべてを単純なクラスにまとめると、ポインターでばかげたことをする可能性が低くなります。clear()ヒストグラム データをゼロに設定する関数を作成することもできます (これはhistdataベクトルをリッピングしてゼロにするだけです)。

于 2013-05-20T00:51:43.347 に答える