有什么好的方法可以在C ++ 11中初始化二维数组?

时间:2018-07-10 14:46:57

标签: c++ multidimensional-array vector

我想用2-D数组初始化一个Identity Matrix(在主对角线上一个,另一个在零上)。 我尝试使用vector来实现。代码是这样的:

vector<vector<int> > matrix;
matrix.resize(n);
for(auto &i: matrix)
    i.resize(n);

// initialize...

这比仅包含int matrix[n][n]的普通数组要复杂得多。我不这样做,因为我想返回这个二维矩阵。所以功能是这样的:

matrix_type
func(int n)
{
  //intialize the matrix
  ...
}

因为C ++ 11中的数组是这样的:

array<Elem,N> arr;

我不知道如何在运行时获取N。然后我决定使用向量。

那么有没有更好的方法来处理呢?(不使用传统数组)


感谢您的回答。该问题可以通过使用

来解决
vector<vector<int>> matrix(n, std::vector<int>(n));

然后,另一个问题。如果我是一个愚蠢的家伙,而我只想使用该接口,即,我希望返回类型为 array<int,n>。那么,有什么方法可以在运行时获取N并将其返回吗?

2 个答案:

答案 0 :(得分:2)

您可以将矩阵的构造/初始化简化为:

vector<vector<int>> matrix(n, std::vector<int>(n));

上面的行会将矩阵的所有元素初始化为0。您可以使用for循环将对角线元素的值设置为1。

for ( size_t i = 0; i < n; ++i )
{
   matrix[i][i] = 1;
}

答案 1 :(得分:0)

您可以按以下步骤初始化std::vector<T>的2D数组:

 template<typename T>
 using Matrix = std::vector<std::vector<T>>;

 template<typename T>
 Matrix<T> make2DArray(int N, int M){
     return Matrix<T>(N, std::vector<T>(M));
 }

这样称呼:

 auto my2Darr = make2DArray<int>(20, 30);