gpt4 book ai didi

c++ - 矩阵初始化

转载 作者:行者123 更新时间:2023-11-28 07:49:30 26 4
gpt4 key购买 nike

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

假设 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com