2013-07-20 19 views
31

W C++, jak utworzyć wielowymiarowy std::array? Próbowałem tego:Wielowymiarowe std :: array

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

Ale to nie działa. Co robię źle i jak mogę to naprawić?

+0

możliwe duplikat [Dlaczego nie prosty initialize (z szelkami) 2D std :: tablicy?] (Http://stackoverflow.com/ pytania/12844475/why-cant-simple-initialize-with-braces-2d-stdarray) – juanchopanza

+0

Jest to problem, który powoduje pewne zamieszanie. Zobacz komentarze do odpowiedzi na duplikat. Nie jestem przekonany, że twój kod jest naprawdę nielegalny w C++ 11, ale nie jest to jednoznaczne. – juanchopanza

+0

To, co właściwie powinienem skompilować, myślę? Dodatkowe szelki można pozbyć się. – Rapptz

Odpowiedz

48

Trzeba dodatkowe wsporniki, aż c++14 proposal rzutach.

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

Czy ktoś może powiedzieć, co oznacza każdy z tych 3 poziomów aparatów ortodontycznych? I dlaczego działa również to: '... = {{{{5, 8, 2}}, {{...}}, ...}}' (4 poziomy nawiasów klamrowych)? – user1234567

+1

@ user3241228 zgaduję: inner = array, next = array-of-arrays, last = uniform initialization. W twoim przykładzie masz tablicę 3d, w której środkowa ranga ma tylko jeden element (a ten element to tablica 3-int). – hoosierEE