如何使用' n'声明std :: vector维数组?

时间:2015-05-13 14:44:53

标签: c++ c++11 vector multidimensional-array stdvector

我的想法如下:二维数组:

int a[9][9];
std::vector<int** a> b;

但是,如果我有

/* I know, it is usually a bad practise to have more than 2 dimensional arrays, but it can happen, when you need it */
int a[3][4][5][6]; 
std::vector<int**** a> b; // ? this just looks bad

3 个答案:

答案 0 :(得分:2)

试试这个:

struct MD_array{ //multidimentional array
   a[3][4][5][6];
};
std::vector<MD_array> b;

然后您可以像这样访问每个数组:

b[i].a[x][y][z][w] = value;

答案 1 :(得分:1)

你可以这样做

int a[3][4][5][6]; 
std::vector<int**** a> b; 

以这两种方式

int a[3][4][5][6]; 
std::vector<int ( * )[4][5][6]> b; 

b.push_back( a );

并且喜欢这个

int a[3][4][5][6]; 
std::vector<int ( * )[3][4][5][6]> b; 

b.push_back( &a );

虽然目前尚不清楚你想要达到的目的。:)

答案 2 :(得分:1)

您还可以使用别名声明:

template <typename T, size_t I, size_t J, size_t K, size_t N>
using SomeArr = std::array<std::array<std::array<std::array<T, I>, J>, K>, N>;

int main()
{
    SomeArr<int,3,4,5,6> arr;
    std::vector<SomeArr<int,3,4,5,6>> someVec;
    someVec.push_back(arr);
}