2013-01-04 140 views
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); 
} 
+5

使用指向矢量的指针,然后动态地分配它,就像击败使用矢量的目的一样好。使用什么错误:'std :: vector t;'? –

+0

实际上,我从一个程序中选择了一部分代码,该程序使用了一组由我的主管实施的类。我不确定她是如何使用它的。 – NRK

+0

嘿,我在这里新来的。不幸的是,其中一个答案在我不知情的情况下被删除了。真的很抱歉。 – NRK

回答

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 

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

+0

感谢兄弟。在这里,稍后在程序中,一些值将在经过一些计算后被放置在矩阵变量中。 – NRK