【问题标题】:Braced initializer list for 2-D std::array in C++C++ 中二维 std::array 的花括号初始化列表
【发布时间】:2018-04-20 23:41:04
【问题描述】:

如何使用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}
};

【问题讨论】:

  • 出于兴趣,您为什么要这样做?你不能使用一维数组和像i * rows + j 这样的索引吗?

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


【解决方案1】:

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

此容器是一种聚合类型,其语义与将 C 样式数组 T[N] 作为其唯一非静态数据成员的结构相同。 ...... 作为一个聚合类型,它可以通过聚合初始化来初始化,最多 N 个可转换为 T 的初始化器:std::array&lt;int, 3&gt; 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

顺便说一句:由于brace elision,您的解决方案有效。

【讨论】:

  • 就是这样!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多