0

たとえば、MxN 配列があるint *b;int **c;します。

  1. の値はb列ごとに格納され (from c)、値を from に配置する必要がありcますb
  2. の値はb行ごとに格納され (から)、値を からにc配置する必要がありますcb

私は基本的に私がそのようにすることを知っています:

j = index / N;
i = index - (j * M);

1D インデックスを 2D 座標に変換するために、1) と 2) の 2 つのケースを実装する方法に問題がありますか?

4

1 に答える 1

2

2D 配列の幅を W、高さを H とします。次に、行優先のレイアウトを想定すると、1D インデックス 'ix' は 2D インデックス [x,y] に次のように関連付けられます。

ix = y*w + x;
y = ix / w;  // implicit floor
x = ix % w;

例えば:

const int W = 3, H=2;
int m[H][W] = {{1,2,3}, {4,5,6}};
int* oneD = &m[0][0];
assert(oneD[1*W + 2] == m[1][2]); // element 6, y=1, x=2
于 2013-01-29T18:37:54.077 に答える