【问题标题】:Multidimensional std::array [duplicate]多维 std::array [重复]
【发布时间】:2013-07-19 13:06:09
【问题描述】:

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

std::array<std::array<int, 3>, 3> arr = {{5, 8, 2}, {8, 3, 1}, {5, 3, 9}};

但它不起作用。我做错了什么,我该如何解决?

【问题讨论】:

  • 这个问题会引起一些混乱。请参阅 cmets 以获取副本的答案。我不相信你的代码在 C++11 中真的是非法的,但它并不明确。
  • 我认为实际上应该编译?多余的大括号可以省略。
  • 请注意,有一个c++14 proposal 可以解决此问题。
  • @Rapptz 我认为它们可以被忽略,我也认为(但不是很清楚)它们一开始就不应该被需要。

标签: c++ stl


【解决方案1】:

您需要额外的括号,直到 c++14 proposal 出现。

std::array<std::array<int, 3>, 3> arr = {{{5, 8, 2}, {8, 3, 1}, {5, 3, 9}}};

【讨论】:

  • 谁能告诉,这 3 层大括号中的每一个是什么意思?为什么也可以这样工作:... = {{ {{5, 8, 2}}, {{...}}, ... }}(4 级大括号)?
  • @user3241228 我的猜测:inner=array,next=array-of-arrays,last=uniform 初始化。在您的示例中,您有一个 3d 数组,其中中间排名恰好有一个元素(并且该元素是一个 3-int 数组)。
  • 额外的括号在 C++17 中仍然是必需的。 godbolt.org/z/8ejr37
  • 在 C++20 中也是必需的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
相关资源
最近更新 更多