使用1D迭代访问2D数组

时间:2016-01-01 23:09:21

标签: c++ c++11

如果我按如下方式定义数组:

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]);

如何通过1维迭代此数组? 例如。我想做以下事情:

mat[10] = 1;

实现与

相同的事情
mat[1][0] = 1;

有没有办法取消引用双**数组来执行此操作?

2 个答案:

答案 0 :(得分:1)

mat[row * cols + column]

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

当然,对数组的迭代只涉及某种循环(最适合for)并且每次只应用模式。

答案 1 :(得分:1)

根据您对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宏来扩展二维