定義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}}
};
嗯,這看起來醜陋—使用的typedef(或別名),以簡化的語法:
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;
希望有所幫助。
你已經使用二維數組,那麼你爲什麼不使用3D陣列? – ikh 2014-08-31 13:08:55
我不知道這樣的事情存在。並非每個人都有多年的C++編程和文檔編制經驗,這很難理解。就像納瓦茲所說的那樣,原始數組並不是最好的解決方案。我在我的代碼中使用了std :: array。 – Matt 2014-09-01 10:52:07
是的。在C++ 11中,除了一些長代碼外,'std :: array'比原始數組要好。但是,如果你決定使用它,我建議你將代碼中的所有原始數組改爲'std :: array'以保持一致性。 – ikh 2014-09-01 15:12:45