从2d数组转换为1d

时间:2015-12-09 10:29:38

标签: c++ c arrays

我将2D数组作为一个可以被认为是游戏板的网格。当棋盘初始化以便比赛开始时,有四个人。它适用于nxn网格。作为一个例子

x o
o x

我是使用2D数组做的。现在,我尝试将数组转换为1D。我一直坚持如何将符号放在网格上为1D数组。

for(int i = 0; i < row; ++i)
    for(int j = 0; j < col; ++j)
    {
        //grid[i][j] = '.';
        grid[i * col + j] = '.'; // I've converted the part
    }

    int centerh = row / 2;
    int centerw = col / 2;

    // I'm stuck that part.

    grid[centerh][centerw] = 'o';
    grid[centerh - 1][centerw - 1] = 'o';

    grid[centerh][centerw - 1] = 'x';
    grid[centerh - 1][centerw] = 'x';

2 个答案:

答案 0 :(得分:1)

这会将您的2D网格转换为1D:

grid1D[row*col];
grid2D[row][col];

for(int i = 0; i < row; ++i)
    for(int j = 0; j < col; ++j)
          grid1D[i * col + j] = grid2D[i][j];

答案 1 :(得分:1)

在C中,我会使用宏和一维数组作为此类事情的基础。

类似的东西:

#define WIDTH 10
#define HEIGHT 10

char grid[ WIDTH * HEIGHT ] ;

#define ELEMENT(row,column)    grid[ ( (row)*WIDTH ) + (column) ]

/* Read an element */

char c ;

c = ELEMENT( 5, 7 ) ;

/* write to an element */

ELEMENT( 5, 7 ) = 'x' ;

/* access the array in 1D is trivial as you simply use grid[] directly */

因此,您可以使用相同的1D数组作为2D项目而无需重复。

重要的一点是:在使用宏时避免后期和预先减量操作。原因是它们可能导致混淆错误,因为宏不是函数,宏的每个“参数”只是替换相应宏“参数”的文本。