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

标签 c++ multidimensional-array vector

<分区>

我想用一个二维数组初始化一个单位矩阵(主对角线上的一个和其他地方的零)。 我尝试用 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<vector<int>> matrix(n, std::vector<int>(n));

还有,另一个问题。如果我是一个笨蛋,只想使用接口(interface),也就是说,我希望返回类型是 array<int,n> .那么有没有什么方法可以在运行时获取N并返回呢?

最佳答案

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

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

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

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

关于c++ - 有什么好的方法可以在 C++ 11 中初始化二维数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51268229/

相关文章:

c++ - 错误c2007 : #define syntax//invalid syntax at a comment block? [closed]

c - 三维数组在内存中是如何存储的?

c - 如何创建依赖于用户输入的行数的多维数组?

c++ - 将 vector<string> 元素复制到其他 vector<string>* (1 作为指针传递)

c++ - GetWindowPlacement 给出了不正确的窗口位置

c++ - 这样的类只能由多个线程设置一次吗?

c++ - 实时应用程序中的内存泄漏检查

c - 在函数中使用指针访问二维数组

c++ - 插入多个元素时 vector 大小仅增加一

c++ - ublas::vector push_back 在哪里?