重複の可能性:
C ++で配列を使用するにはどうすればよいですか?
サイズmxnの2D配列を使用する代わりに、サイズ'mn'の1D配列を使用することのメモリの問題や実行の問題、またはメリットやデメリットはありますか?
重複の可能性:
C ++で配列を使用するにはどうすればよいですか?
サイズmxnの2D配列を使用する代わりに、サイズ'mn'の1D配列を使用することのメモリの問題や実行の問題、またはメリットやデメリットはありますか?
メモリでは、それらはまったく同じように表されます。違いはセマンティックです。マトリックスを操作している場合、要素に次のようにアクセスします
x[i][j]
よりも直感的です
x[i*n + j]
配列 1D と 2D はどちらも、メモリの観点ではまったく同じです。唯一の違いは構文です。3D 配列は、問題を回避するロジックを設計する場合にのみ役立ちます。
例えば:
array x[m*n]
array x[m][n]
記憶で言えばどちらも同じ
int の 2D 配列と int へのポインターを作成できます。
次に、ポインタを最初の要素のアドレスに設定できます
int* singleDimention=&twoDimension[0][0];
2D 座標に関係なくすべてのアイテムを処理する場合は、1 次元配列を使用する方が (わずかに) 高速になります。
numItems=n*m;
for(i=0;i<numItems;i++){
do stuff with singleDimention[i];
}