C++ 分割和比较二维动态数组

C++ Sectioning and Comparing a 2d Dynamic Array

我正在解决一个 class 的问题,它要求我们使用二维动态数组来获取整数作为每个数组 'block' 的每个条目并保存它。它必须能够接受任何大小的数组,所有这些都是在程序获得 运行 时从用户输入的。 然后,数组中的条目将按数组中的每个 3x3 部分排序,并且最大的 'section' 的总和将被 returned。

我在分配内存和分配整数方面没有遇到问题,我还设置了程序完成时删除和 return 所有动态内存,但我想不通了解如何访问数组的每个 3x3 部分。我只能访问第一个加在一起,而不使用循环。我很确定我需要一个循环来获取所有数据。

我将如何访问、求和和比较数组的每个 3x3 部分?

这是我目前所拥有的一部分;

  int sumGrid = 0;

  // this will get the 1st 3x3's sum correct
  sumGrid = (grid[i][j] + grid[i+1][j] + grid[i+2][j] + grid[i][j+1]
             + grid[i+1][j+1] + grid[i+2][j+1] + grid[i][j+2]
             + grid[i+1][j+2] + grid[i+2][j+2]);

  // this part isn't right though
  for (i = 0; i < height; i++)
  {
    for(j = 0; j < width; j++)
    {
      if(((i+1)<height)&&((i+2)<height)&&((j+1)<width)&&((j+2)<width))
        {
          int tempGrid = 0;
          tempGrid = (grid[i][j] + grid[i+1][j] + grid[i+2][j] + grid[i][j+1]
                + grid[i+1][j+1] + grid[i+2][j+1] + grid[i][j+2]
                + grid[i+1][j+2] + grid[i+2][j+2]);
          if(tempGrid < sumGrid)
            sumGrid = tempGrid;
        }
      else break;
    }
  }
  biggestGrid = sumGrid;

任何帮助或指出正确的方向将不胜感激!谢谢!

在循环内部,您访问元素 i+1 和 i+2 以及 j+1 和 j+2。然而,朝向阵列的边缘,它会越界。

要解决这个问题,您需要数组停止在 height-2 和 width-2 而不是高度和宽度。