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

标签 c++ dynamic-arrays

我遇到了这段代码 (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/

相关文章:

c++ - Eigen 矩阵右除等价

c++ - 当工件是库且标志影响 C 或 C++ header 时,功能标志/切换

c++ - 我的编程面试题: Reverse a string and find the mode of an array

c - 从动态分配的结构数组中释放特定元素

c - vector 实现和数据成员定义

c++ - 我可以根据是否有东西可以释放来释放内存吗?

c++ - 将两个排序 vector 合并为一个排序 vector

php - 如何在以下场景中操作数组?

c - 将字符串添加到字符串数组会以某种方式更改数组中的先前字符串

javascript - 变体数组自定义函数 Google Sheets?例如VBA