0

有人可以解释下面标记线的意义吗?通常它正在初始化矩阵。

假设 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);   
}
4

1 回答 1

1

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

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

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

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

于 2013-01-04T16:21:12.637 回答