2013-07-20 58 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