C ++中2-D std :: array的Braced初始化列表

时间:2017-11-08 10:21:14

标签: c++ arrays c++11 matrix initialization

如何使用std::array初始化数组数组? 我的解决方案是

array<array<int, sze>, sze> arcpp { 0, 1, 2, 3 , 4, 5, 6, 7, 8, 9, 10, 11 ,12, 13, 14, 15 };
for (auto i = 0; i < sze; i++) {
    cout << "\n";
    for (auto j = 0; j < sze; j++) {
        cout << "\t" << arcpp[i][j];
    }
}

但我想要这样的事情:

int matrix[][sze] = {
    {0, 1, 2, 3},
    {4, 5, 6, 7},
    {8, 9, 10, 11},
    {12, 13, 14, 15}
};

1 个答案:

答案 0 :(得分:5)

std::array包含一个内部原始数组,

  

此容器是一种聚合类型,其语义与包含C样式数组T[N]作为其唯一非静态数据成员的结构相同。 ......作为聚合类型,可以使用最多N个初始化程序给出的聚合初始化来初始化它,这些初始化程序可以转换为T:std::array<int, 3> a = {1,2,3};

所以你需要添加额外的大括号来聚合初始化std::array内的内部数组,例如

array<array<int, sze>, sze> arcpp = {{
    {0, 1, 2, 3},
    {4, 5, 6, 7},
    {8, 9, 10, 11},
    {12, 13, 14, 15}
}};

LIVE

BTW:您的解决方案因brace elision而有效。