2013-07-20 55 views
31

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

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

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

+0

可能重复[为什么不能简单的初始化(用大括号)2D的std ::数组?](http://stackoverflow.com/问题/ 12844475/why-cant-simple-initial-with-braces-2d-stdarray) – juanchopanza

+0

这是一个引起混淆的问题。查看对重复的答案的评论。我不相信你的代码在C++ 11中是非法的,但它并不是很明确。 – juanchopanza

+0

这实际上应该编译我认为?额外的括号可以省略。 – Rapptz

回答

48

你需要额外的支架,直到c++14 proposal踢。

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

任何人都可以说,这3个级别的大括号​​都意味着什么? 为什么也这样工作: '... = {{{{5,8,2}},{{...}},...}}'(4级大括号)? – user1234567

+1

@ user3241228我的猜测:inner = array,next = array-of-arrays,last =统一初始化。在你的例子中,你有一个3d数组,其中的中间级恰好有一个单一的元素(该元素是一个3-int数组)。 – hoosierEE