2013-07-20 23 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 =配列の配列、last = uniform初期化。あなたの例では、中間のランクにはただひとつの要素があり(その要素は3-int配列です)、3次元配列があります。 – hoosierEE