作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了这段代码 (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/
我想模拟这个函数: function getMetaData(key) { var deferred = $q.defer(); var s3 = vm.ini
我是一名优秀的程序员,十分优秀!