我想用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并将其返回吗?
答案 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);