2013-07-20 47 views
31

Trong C++, làm cách nào để tạo một số nhiều chiều std::array? Tôi đã thử điều này:Đa chiều std :: mảng

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

Nhưng nó không hoạt động. Tôi đang làm gì sai và làm thế nào để sửa lỗi này?

+0

thể trùng lặp của [Tại sao có thể không đơn giản initialize (với niềng răng) 2D std :: mảng?] (Http://stackoverflow.com/ question/12844475/why-cant-simple-initialize-with-niềng răng-2d-stdarray) – juanchopanza

+0

Đây là một vấn đề gây ra một số nhầm lẫn. Xem các bình luận cho câu trả lời cho bản sao. Tôi không tin rằng mã của bạn thực sự là bất hợp pháp trong C++ 11, nhưng nó không rõ ràng. – juanchopanza

+0

Điều đó thực sự nên biên dịch tôi nghĩ? Các niềng răng thêm có thể được elided. – Rapptz

Trả lời

48

Bạn cần dấu ngoặc thêm, cho đến khi c++14 proposal đá trong.

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

Bất cứ ai có thể cho biết, tất cả 3 cấp niềng răng này có nghĩa là gì? Và tại sao cũng làm việc này: '... = {{{{5, 8, 2}}, {{...}}, ...}}' (4 cấp niềng răng)? – user1234567

+1

@ user3241228 phỏng đoán của tôi: inner = array, next = array-of-array, last = khởi tạo đồng bộ. Trong ví dụ của bạn, bạn có một mảng 3d, trong đó thứ hạng trung chỉ xảy ra để có một phần tử đơn (và phần tử đó là một mảng 3-int). – hoosierEE