gpt4 book ai didi

c++ - 难以理解数组的动态数组的一种实现

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

我遇到了这段代码 (source) :

// memory allocation
float *temp = new float[(order-1)*(order-1)];
float **minor = new float*[order-1];
for(int i=0;i<order-1;i++)
minor[i] = temp+(i*(order-1));

我真的不明白。这段代码的作者试图完成什么? (是的,我知道他正在尝试编写一个程序来求逆矩阵,但我不明白这段代码是如何工作的。)

我认为这是等价的:

float **minor;
minor = new float*[order-1];
for(int i=0;i<order-1;i++)
minor[i] = new float[(order-1)*(order-1)];

因为 +(i*(order-1)) 似乎只是为了向前移动本质上是内存单元的宽度。不过,我敢肯定,我对这个假设大错特错了。尽管我的理论是错误的,但我在任何地方都找不到对此的解释,因此非常感谢深入的解释。解释如何使用浮点 vector 的 vector 来实现这一点也可能会有帮助。

最佳答案

第一个代码有效地分配了一个 (order-1) x (order-1) 矩阵。它可以像 minor[i][j] 这样处理。也可以通过temp线性寻址:temp[i * (order-1) + j]。有时用这两种方法来寻址矩阵会很方便。许多商业/开源矩阵库都使用线性寻址矩阵。

另一种看待它的方式:temp 被分配为一个大块,然后 minor 为每一行(或列,取决于您的观点)索引到 temp。

第二个代码不一样。它正在分配 (order-1)x(order-1)x(order-1) 个元素。

关于c++ - 难以理解数组的动态数组的一种实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35954191/

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