C ++剖分和比较2d动态数组

时间:2015-02-10 17:59:28

标签: c++ dynamic-arrays

我正在研究一个类的问题,该类要求我们使用2d动态数组来获取每个数组'block'的每个条目的整数并保存它。它必须能够采用任何大小的数组,所有这些都是在程序运行时从用户输入的。 然后,数组中的条目将按数组中的每个3x3部分进行排序,并返回最大“部分”的总和。

我没有分配内存和分配整数的问题,我还设置了在程序完成时删除并返回所有动态内存,但我无法弄清楚如何访问每个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;

任何有关正确方向的帮助或观点都将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

在循环内部,您可以访问元素i + 1和i + 2以及j + 1和j + 2。但是,朝向数组的边缘,它将超出范围。

要解决此问题,您需要将数组停在height-2和width-2而不是height和width。