我已经通过以下方式声明了一个二维数组(请注意我是新手!)
double **A=new double*[10];
for(int i=0;i<10;i++)
A[i]=new double[5];
所以我猜这已经定义了一个大小为 10 x 5 的矩阵。
我知道要引用它的行我可以使用
A[i]
但问题是,如何引用A的一列呢?像 A[][i] 这样的东西?
最佳答案
您不能直接访问列。
您可以通过 A[i](它本身是一个数组)或元素 A[i][j](在您的情况下是一个 double )访问一行。
如果你想得到一个列你必须迭代抛出数组
for(unsigned int i = 0; i < 10; i++)
{
A[i][2] // do something
}
访问第三列。
因此,考虑是要创建 10x5 还是 5x10 矩阵会很有用。如果您经常只需要处理一行或一列,那么反转数组布局(此处切换列和行)可能是个好主意
编辑: 这是一些简化的解释: 想象一下下面的代码
int** A = new int*[2];
for(int i=0;i<2;i++)
A[i]=new int[3];
// more init code
那么内存中的数组可能是这样的:
所以很容易看出“蓝色行”可以直接访问,因为它的起始地址在 A[0] 中 但是,如果您想要子数组的每三个元素,则必须遍历 A 并将 2 添加到每个起始地址。尤其是如果您通过“new”使用堆内存,则无法保证子数组之间的内存固定距离。
但是您通常可以通过以一种好的方式选择数组的布局来加快计算速度。例如,可以在实现矩阵乘法时存储转置的第二个矩阵。
关于c++ - 如何在 C++ 中引用二维数组(矩阵)的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32006805/