簡體   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