如果我定义一个数组如下:
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
的定义,您可以这样做:
double* v = mat[0]; 'use v a uni-dimensional vector
for(int i =0; i< rows* cols; i++) v[i] = 1;
或者,如果您想要将 mat
本身定义为一维 vector ,并以一种巧妙的方式将其用作二维 vector :
double mat[rows * cols];
#define MAT(i, j) mat[i*cols + j]
MAT(1, 0) = 1;
<=>
mat[10] = 1
现在您可以选择使用 mat
跨越一维矩阵或使用 MAT
宏跨越二维
关于c++ - 使用一维迭代访问二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34560968/