矩阵初始化

时间:2013-01-04 16:08:44

标签: 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 个答案:

答案 0 :(得分:1)

代码构造并初始化方形矩阵的上部或下部(取决于索引的解释)三角形。行(1)分配新的行或列向量。行(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

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

相关问题