复制数组?

时间:2012-10-16 10:36:41

标签: c++ arrays

  

可能重复:
  How do I use arrays in 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]; 
          }

由于某种原因,当我对每个元素进行cout时,不会发生复制。任何人都可以帮助我知道为什么会这样吗?我只想要从arr [row] [1] - &gt; possibleNumbers [k]到arr [row] [7] - &gt; possibleNumbers [k]的每个数组都具有与arr [row] [8] - &gt;相同的值。 possibleNumbers [K]。 PossibleNumbers的范围是0到9,如果有帮助的话。

如果有人能提供帮助那就太好了。

感谢。

1 个答案:

答案 0 :(得分: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