Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 难以理解动态数组的一种实现_C++_Dynamic Arrays - Fatal编程技术网

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

C++ 难以理解动态数组的一种实现,c++,dynamic-arrays,C++,Dynamic Arrays,我遇到了以下代码: //内存分配 浮动*温度=新浮动[(订单-1)*(订单-1)]; 浮动**次要=新浮动*[订单-1]; 对于(int i=0;i第一个代码有效地分配了一个(order-1)x(order-1)矩阵。它可以像minor[i][j]一样寻址。它也可以通过temp:temp[i*(order-1)+j]线性寻址。有时使用这两种方法对矩阵进行寻址会很方便。许多商业/开源矩阵库使用线性寻址矩阵 另一种方法是:temp被分配为一个大的块,然后次要的是为每一行(或每一列,取决于您的观点)建

我遇到了以下代码:

//内存分配
浮动*温度=新浮动[(订单-1)*(订单-1)];
浮动**次要=新浮动*[订单-1];

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

另一种方法是:temp被分配为一个大的块,然后次要的是为每一行(或每一列,取决于您的观点)建立temp索引


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

此代码的作者试图实现什么?-让读者感到困惑,他似乎成功了:-)。您可以补充一点,将其分配为单个数组而不是指向更多数组的指针数组更利于缓存并减少堆碎片,这可能就是这样做的原因。如果
minor[i]=new float[(order-1)*(order-1)],第二个代码是否相同替换为
minor[i]=新浮点[order-1]?不适用于所有用途。您可以以相对较小的顺序单步执行调试器,然后查看实际的指针地址。在第一个代码中,如果顺序为5,则次[0]可以是0x1000,次[1]=0x1010(16字节之后,因为浮点为4字节),次[2]=0x1020,次[3]=0x1030。如果你不能很好地读懂十六进制,只需把值放在十进制中。在第二种情况下,每个次要[]项都有自己的64个字节,可容纳16个浮点。即使使用新注释,次要[]值也会分散在内存中。这可能是问题,也可能不是问题。
// 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)];