c++ - 如何在 C++ 中引用二维数组(矩阵)的列

标签 c++

我已经通过以下方式声明了一个二维数组(请注意我是新手!)

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

那么内存中的数组可能是这样的:

Simple 2D array in memory

所以很容易看出“蓝色行”可以直接访问,因为它的起始地址在 A[0] 中 但是,如果您想要子数组的每三个元素,则必须遍历 A 并将 2 添加到每个起始地址。尤其是如果您通过“new”使用堆内存,则无法保证子数组之间的内存固定距离。

但是您通常可以通过以一种好的方式选择数组的布局来加快计算速度。例如,可以在实现矩阵乘法时存储转置的第二个矩阵。

关于c++ - 如何在 C++ 中引用二维数组(矩阵)的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32006805/

相关文章:

c++ - 在 CppAD 中使用导数作为函数

c++ - 用C++重写一个简单的Pygame 2D绘图函数

c++ - 如何在方法中设置 vector 的默认值

c++ - 如何从txt文件中读取迷宫并将其放入二维数组中

c++ - Openframeworks > 按每日计划动态更改(加载)图像

c++ - 如何从函数类型自动推断返回类型?

c++ - 编译器不会提示函数没有返回值

C++ move 语义(和右值引用)与普通引用

android - 在 OpenCV android 应用程序中启用 "libc++_shared.so"

c++ - 这个静态类字段在创建之前就被使用了吗?