有人可以解释下面标记线的重要性吗?通常它正在初始化矩阵。
让我们说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);
}
答案 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
取决于矩阵的第一个索引是引用行还是列。