2011-01-26 8 views
0

私は、3D配列にデータを格納し、調整する必要のあるC++プログラムを作成しようとしています。サイズはユーザーによって与えられ、実行中は変更されません。複雑なマトリックス操作を実行する必要はありません。私はそれを設定し、与えられた3D座標から取得するように最適化する必要があります(私はすべてのメンバーに対してかなりの反復を行い、それは大きな配列です)。配列を定義する最善の方法は何ですか?ベクトルのベクトルのベクトル?ベクトルの配列?マルチチャンネルのCvMat/IplImage?私はそれを3Dとして保つか、非常に長いインターリーブされた1つのベクトルに変換し、それに応じてインデックスを計算する必要がありますか?C++の効率的な多次元データ記憶

ありがとうございます!

+0

3Dアレイの大きさはどれくらいですか?どのように高密度(または希薄)ですか?メモリ使用量が懸念されているのですか、または最高の実行時パフォーマンスを探していますか? –

答えて

0

効率的であるということによりますが、KD Treesを見ましたか?

2

私はあなたの最後のオプション、変換されたインデックスを持つ単一の大きな配列に行きます。あなたがしたいのは、既知のインデックスを読み書きするだけであれば、おそらくストレージとスピードの両方で最も効率的な構造です。これをクラスでラップしてoperator()にオーバーロードすると、3D座標に簡単にアクセスできるようにすることもできます。 a(1,2,3) = 10;と書くことができ、オーバーロードされた演算子は3D座標を線形インデックスに変換する際に注意が必要です。このような配列を反復することは、次元が1つしかないので非常に簡単です。