Определение n
как:
int n[2][3][3]= {
{{2,7,3},{1,8,7},{5,6,2}},
{{4,5,8},{5,5,6},{2,6,2}}
};
Обратите внимание, что сырые массивы в C++ не достаточно хорошо. Лучше использовать std::array
:
std::array<std::array<std::array<int,3>,3>, 2> n = {
{{2,7,3},{1,8,7},{5,6,2}},
{{4,5,8},{5,5,6},{2,6,2}}
};
Ну, это выглядит некрасиво — использование ЬурейеЕ (или псевдоним) для упрощения синтаксиса:
template<typename T, std::size_t M, std::size_t N, std::size_t P>
using array3d = std::array<std::array<std::array<T,P>,N>, M>;
Затем используйте его как:
array3d<int,2,3,3> n = {
{{2,7,3},{1,8,7},{5,6,2}},
{{4,5,8},{5,5,6},{2,6,2}}
};
То лучше.
Вы можете обобщать псевдоним как:
#include <array>
template<typename T, std::size_t D, std::size_t ... Ds>
struct make_multi_array
: make_multi_array<typename make_multi_array<T,Ds...>::type, D> {};
template<typename T, std::size_t D>
struct make_multi_array<T,D> { using type = std::array<T, D>; };
template<typename T, std::size_t D, std::size_t ... Ds>
using multi_array = typename make_multi_array<T,D,Ds...>::type;
Затем использовать его в качестве (прочитать комментарии для лучшего понимания):
//same as std::array<int,10>
//similar to int x[10]
multi_array<int,10> x;
//same as std::array<std::array<int,20>,10>
//similar to int y[10][20]
multi_array<int,10,20> y;
//same as std::array<std::array<std::array<int,30>,20>,10>
//similar to int z[10][20][30]
multi_array<int,10,20,30> z;
Надежда, что помогает.
Вы уже использовали 2D массив, то почему бы вам не использовать 3D массив? – ikh
Я не знал, что что-то подобное существует. Не все имеют многолетний опыт программирования и документации для C++, очень трудно понять. Также, как сказал Наваз, необработанные массивы - не лучшее решение. Я использовал std :: array в моем коде. – Matt
Да. В C++ 11 'std :: array' лучше, чем необработанный массив, за исключением короткого кода. Однако, если вы решите использовать это, я рекомендую вам изменить все необработанные массивы в вашем коде на 'std :: array' для согласованности. – ikh