如何在C ++中以一维数组映射二维数组? (列优先)

时间:2013-01-29 20:45:27

标签: c arrays matrix

设W是2D数组的宽度,H是它的高度。在行主要布局中,我可以这样做:

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

但是专栏如何,任何想法呢?

1 个答案:

答案 0 :(得分:2)

在C内部行使用主要方法(m在内存中有条理地布置为1,2,3,4,5,6),因此您可以直接用oneD表示示例。但是,由于C内部使用行主要方法,因此无法将列主要布局表示得如此简单。因此,要获得正确的列主要方法,可以使用以下

#include <stdio.h>
#include <iostream>
int main() {
const int W = 3, H=2;
int m[H][W] = {{1,2,3}, {4,5,6}};
int* oneD = new int[H*W];
for(int i=0; i<W; i++)
    for(int j=0; j<H; j++)
        oneD[H*i+j]=m[j][i];
for(int i=0; i<H*W; i++)
    std::cout<<oneD[i]<<" ";
return 0;
}