2

可能重复:
如何在 C++ 中使用数组?

我在将数组复制到数组时遇到问题。我有一种感觉,这可能是因为使用了指针,但如果我错了,请纠正我。

我的功能如下:

bool sodoku::rowTest(sodoku *arr[9][9])
{
  int row = 0;
  while(row < 9)
  {
    for(int j = 0; j < 9; j++)
    {
      for(int k = 0; k < 9; k++)
      {
        if(arr[row][j]->number  == arr[row][j]->possibleNumbers[k])
        {
          for(int i = 0; i < 9; i++)
          {
            arr[row][i]->possibleNumbers[k] = 0;
          }
        }
          for(int g = 0; g < 7; g++)
          {
           int t = 8;
           arr[row][g]->possibleNumbers[k] = arr[row][t]->possibleNumbers[k]; 
          }
          cout << "arr row j num : " << arr[row][j]->possibleNumbers[k] << "row: " << row << " column: " << j << endl;
      }
    }
  row++;
  }
  if(row == 9)
    return true;
  }
return true;
}

我的小麻烦就在这里:

          for(int g = 0; g < 7; g++)
          {
           arr[row][g]->possibleNumbers[k] = arr[row][8]->possibleNumbers[k]; 
          }

由于某种原因,当我计算每个元素时,不会发生复制。谁能帮助我知道为什么会发生这种情况?我只希望从 arr[row][1]->possibleNumbers[k] 到 arr[row][7]->possibleNumbers[k] 的每个数组都具有与 arr[row][8]->possibleNumbers[k] 相同的值]。如果有帮助,PossibleNumbers 的范围是 0 到 9。

如果有人可以提供帮助,那就太好了。

谢谢。

4

1 回答 1

3

数组变量不会被复制,但您可以使用 std::copy。

此外,按值传递数组会导致数组衰减,这意味着实际的T(&)[N]作为T*. 为防止这种情况,请改为通过引用传递。

这是一个为您执行此操作的通用辅助函数:

#include <algorithm>

template <typename T, int N>
void copy(T(&dest)[N], T(&src)[N])
{
    std::copy(dest, dest+N, src);
}

现在你可以说

char dest[5];
char src [5];
copy(dest, src); // provided same element type and size

另请注意,成员数组复制

struct SudokuRow
{
    unsigned char cells[9];
};

SudokuRow a, b;
a = b; // copies just fine
于 2012-10-16T10:46:18.513 回答