c++ - 矩阵初始化

标签 c++ matrix

有人可以解释下面标记线的意义吗?一般是初始化矩阵。

假设 size = 3。那么它应该创建一个有 6 个位置的矩阵,即 1x6 矩阵。但是每次都需要第二行。为什么每次都推送 -1?

for (unsigned i = 0; i < size(); i++) { 
    vector<int> *t = new vector<int>;       // (1)
    for (unsigned j = 0; j <= i; j++) { 
        t->push_back(-1);                   // (2)
    }
    matrix.push_back(*t);   
}

最佳答案

代码构造并初始化方阵的上三角或下三角(取决于索引的解释)。 (1) 行分配一个新的行或列 vector 。 (2) 行使用任意值 (-1) 初始化直到并包括矩阵对角线的值。为什么代码使用-1作为初始值只能通过检查代码或阅读随附的文档来回答。

除了功能行 (1) 会产生内存泄漏。由于 matrix 不拥有 t 的所有权,因此当 t 超出范围时无法回收内存。更正后的代码如下所示:

for (unsigned i = 0; i < size(); i++) { 
    vector<int> t;       // (1)
    for (unsigned j = 0; j <= i; j++) { 
        t.push_back(-1); // (2)
    }
    matrix.push_back(t);
}

请注意 (1) 行分配了一个对象,该对象在超出范围时会自动销毁。这修复了原始代码中的内存泄漏。假设大小为 3,这将产生:

-1 -1 -1          -1
   -1 -1    or    -1 -1
      -1          -1 -1 -1

取决于矩阵的第一个索引是引用行还是列。

关于c++ - 矩阵初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14160621/

相关文章:

c++ - 使用CMake构建C++项目时,链接Crypto++失败

c++ - 以后是否可以将线程添加到 omp for cyclus 中?

c++ - 在实现类中访问类的方法

r - 通过排列 R 中的列来最大化矩阵的对角线

c++ - 找到小于或等于当前塔的先前塔的数量

c++ - 在 travis for clang 上使用不同的 libc++ 版本

c++ - 避免 LAPACK 中的矩阵半矢量化

r - 自己计算协方差矩阵(不使用 `cov` )

python-3.x - 查找矩阵的最大值和最小值

r - 如何从R中的矩阵列表中的每个矩阵中删除列?