2014-08-31 43 views
1

希望你能幫助我。Array在C++中的陣列

比方說,我有兩個矩陣陣列:

int n1[3][3]={{2,7,3},{1,8,7},{5,6,2}}; 
int n2[3][3]={{4,5,8},{5,5,6},{2,6,2}}; 

然後我就可以使用

cout << n1[0][0] << endl; 

將返回過程的2調用其中的一個,但我想要得到的東西像

cout << n[1][0][0] << endl; // Returns 2 
cout << n[2][0][0] << endl; // Returns 4 

你能讓我知道我該怎麼做到這一點?

+0

你已經使用二維數組,那麼你爲什麼不使用3D陣列? – ikh 2014-08-31 13:08:55

+0

我不知道這樣的事情存在。並非每個人都有多年的C++編程和文檔編制經驗,這很難理解。就像納瓦茲所說的那樣,原始數組並不是最好的解決方案。我在我的代碼中使用了std :: array。 – Matt 2014-09-01 10:52:07

+0

是的。在C++ 11中,除了一些長代碼外,'std :: array'比原始數組要好。但是,如果你決定使用它,我建議你將代碼中的所有原始數組改爲'std :: array'以保持一致性。 – ikh 2014-09-01 15:12:45

回答

10

定義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; 

希望有所幫助。

+1

+1多陣列。這就是我一直想要的。 – ikh 2014-09-01 15:13:58

1

然後您需要創建一個三維數組並訪問第二行,第一列和第一個深度列。

1
int foo[x][y][z] = {}; 

這使得尺寸X * Y * Z的多維數組的所有元素初始化爲0