2013-07-20 12 views
31

In C++, come si crea un multidimensionale std::array? Ho provato questo:Multidimensional std :: array

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

Ma non funziona. Cosa sto sbagliando e come posso risolvere questo problema?

+0

possibile duplicato del [Perché non semplice inizializzazione (con le parentesi graffe) 2D std :: array?] (Http://stackoverflow.com/ domande/12844475/why-cant-simple-initialize-with-braces-2d-stdarray) – juanchopanza

+0

Questo è un problema che genera confusione. Vedi i commenti alla risposta al duplicato. Non sono convinto che il tuo codice sia veramente illegale in C++ 11, ma non è chiaro. – juanchopanza

+0

Che in realtà dovrei compilare penso? Le parentesi graffe extra possono essere eliminate. – Rapptz

risposta

48

È necessario parentesi in più, fino a quando c++14 proposal calci.

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

Qualcuno può dire, cosa significa tutti questi 3 livelli di parentesi? E perché funziona anche questo: '... = {{{{5, 8, 2}}, {{...}}, ...}}' (4 livelli di parentesi graffe)? – user1234567

+1

@ user3241228 la mia ipotesi: inner = array, next = array-of-array, last = initialization uniforme. Nel tuo esempio, hai un array 3d, dove il middle rank ha un solo elemento (e quell'elemento è un array 3-int). – hoosierEE

Problemi correlati