多维std :: array

Laz*_*h13 48 c++ stl

在C++中,如何创建多维std::array?我试过这个:

std::array<std::array<int, 3>, 3> arr = {{5, 8, 2}, {8, 3, 1}, {5, 3, 9}};
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我做错了什么,如何解决这个问题?

bil*_*llz 64

你需要额外的括号,直到c ++ 14提案开始.

std::array<std::array<int, 3>, 3> arr = {{{5, 8, 2}, {8, 3, 1}, {5, 3, 9}}};
Run Code Online (Sandbox Code Playgroud)

  • 谁能说出来,所有这3个级别的括号都意味着什么?为什么还要这样做:'... = {{{{{{8,8}},{{...}},...}}`(4个大括号)? (14认同)
  • 在 C++17 中,额外的括号仍然是必需的。https://godbolt.org/z/8ejr37 (10认同)
  • 在 C++20 中也是必需的。 (7认同)
  • 在C++23中仍然必要(根据GCC13.2、Clang 17.0.1上的测试) (3认同)
  • @ user3241228我的猜测:inner = array,next = array-of-arrays,last = uniform initialization.在您的示例中,您有一个3d数组,其中中间排恰好恰好有一个元素(该元素是一个3-int数组). (2认同)