我在课堂上有这个数组,我需要为它分配9 * 9数字矩阵。
class puzzle{
int gme[9][9];
}
我知道用cze封装初始化在c ++中分配数组是不可能的:在这个问题中提到:c++ array assignment of multiple values
可以使用std::copy(newgme, newgme + 3, gme);
并分配数组。
我不想这样做,因为我们需要在类外部分配数组newgme
并将其作为参数传递给成员函数。
Array assignment of multiple values in a class: Which is the best practice?
我想在不使用vectors
的情况下将值设置为这些值:
0,0,7 ,0,0,0 ,4,0,6,
8,0,0 ,4,0,0 ,1,7,0,
0,0,0 ,3,0,0 ,9,0,5,
0,0,0 ,7,0,5 ,0,0,8,
0,0,0 ,0,0,0 ,0,0,0,
4,0,0 ,2,0,8 ,0,0,0,
7,0,4 ,0,0,3 ,0,0,0,
0,5,2 ,0,0,1 ,0,0,9,
1,0,8 ,0,0,0 ,6,0,0
答案 0 :(得分:3)
不幸的是,std::copy
无效,因为嵌套数组int[9]
本身不可分配。有些人可能会建议将多维数组别名为int[81]
,但这是未定义的行为。
您最好的选择可能是使用嵌套的std::array
:
std::array<std::array<int, 9>, 9> gme;
C ++的未来版本可能具有多维数组类型。
另一个选项是Boost.MultiArray,虽然它有动态范围(因此使用动态内存分配)。
答案 1 :(得分:1)
我认为newgme
是这样声明的:
int newgme[9][9];
在这种情况下,您可以使用memcpy
:
void puzzle::set_gme(int newgme[9][9])
{
memcpy(gme, newgme, sizeof(gme));
}
memcpy
是一个继承自C的库函数;它仅适用于POD类型,恰好与您的情况完全相同(在this answer中详细解释)。