我在将数组复制到数组时遇到问题。我有一种感觉,可能是因为指针的使用,但如果我错了,请纠正我。
我的功能如下:
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,如果有帮助的话。
如果有人能提供帮助那就太好了。
感谢。
答案 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