繁体   English   中英

通过一维迭代访问2D数组

[英]Access 2D array with 1D iteration

如果我定义数组如下:

int rows = 10;
int cols = 10;

double **mat;
mat = new double*[rows];
mat[0] = new double[rows*cols];

for(int r=1; r<10; r++)
    mat[r] = &(mat[0][r*cols]);

如何通过一维迭代此数组? 例如,我想执行以下操作:

mat[10] = 1;

实现与

mat[1][0] = 1;

有没有办法取消引用double **数组来做到这一点?

mat[row * cols + column]

其中row是您要访问的行, column是您要访问的列。

当然,在数组上进行迭代只会涉及某种循环(最适合for ),并且每次都会应用该模式。

使用mat的定义,您可以执行以下操作:

double* v = mat[0]; 'use v a uni-dimensional vector
for(int i =0; i< rows* cols; i++) v[i] = 1;

或者,如果您想要将mat本身定义为一维向量,并以一种棘手的方式将其用作二维向量:

double mat[rows * cols];
#define MAT(i, j) mat[i*cols + j]

MAT(1, 0) = 1;
<=>
mat[10] = 1

现在,您可以选择使用mat或二维使用MAT宏将矩阵扩展为一维

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM