循环遍历二维数组(对角线)C++

looping through a 2D array (diagonal) c++

所以我将数组初始化为数组[8][8] 假设我在点(行,列),例如,它是第 4 行第 4 列,我想遍历每个对角线方向(东南、西南、东北、西北)

所以我写了 4 个不同的函数来单独检查每个方向,这里以东北为例

for(int i = 0; i < 8; i++)
    for(int j = 0; j < 8; j++)
        if(array[i - 1][j+1] == 'x')
        {
           count = count + 1; 
        }

有没有办法同时在所有对角线方向循环? 另一个问题是越界怎么办,比如如果点是 (7,7),那么 northeast 将没有值,因为它会超出数组边界 array[6][8],这超出了数组范围界限。我该如何处理这个问题?还是编译器 return 发生错误时?

你当然可以在各个方向都检查,例如

for(int i = 0; i < 8; i++) {
    for(int j = 0; j < 8; j++) {
        if (check_north_east(array, i, j))
            ++count;

        if (check_north_west(array, i, j))
            ++count;

        if (check_south_east(array, i, j))
            ++count;

        if (check_south_west(array, i, j))
            ++count;
    }
}

编译器会愉快地超越数组边界。所以你一定要确定,代码是不会做的,自己检查一下

const int NROWS = 8, NCOLS = 8;
bool check_north_east(char array[][NCOLS], int row, int col)
{
    if (row <= 0 || col >= NCOLS - 1)
        return false;

    return array[row - 1][col + 1] == 'x';
}