类中多个值的数组赋值:最佳实践

时间:2014-02-28 18:20:19

标签: class c++11

我在课堂上有这个数组,我需要为它分配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

2 个答案:

答案 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中详细解释)。

相关问题