如何在C ++中以一维数组映射二维数组?

时间:2013-01-29 18:30:06

标签: c++ arrays matrix

让我们说,我有一个MxN数组:int *b;int **c;其中

  1. b中的值按列(来自c)存储,我需要输入值 从cb
  2. b中的值按行(来自c)存储,我需要输入值 从cb
  3. 我知道基本上我会这样做:

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

    为了将1D索引转换为2D坐标但有问题 如何实现这2个案例,1)和2)?

1 个答案:

答案 0 :(得分:1)

设W是2D数组的宽度,H是它的高度。然后假设行主要布局,1D索引'ix'与2D索引[x,y]相关:

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

e.g:

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