我可以使用单个索引索引多维数组吗?
例如:
在内存中,多维数组的索引类似于单个数组 (例如在矩阵2x2中,矩阵[1] [1]是数组的第四个元素, “matrix [3]”)是否有系统自动使用此表示法?一世 想写写矩阵[3]而不是矩阵[1] [1]:可能吗?
答案 0 :(得分:6)
根据您希望如何访问数据,您可以轻松使用单个索引或使用两种方法。根据数据的访问或使用方式,接受两个索引的方法可以是row-major或column-major。当然要做到这一点,你需要将矩阵存储在一维数组中。例如:
class Matrix {
int data[W*H];
int get(int i) { return data[i]; }
int get(int x, int y) { return data[y*W+x]; }
}
答案 1 :(得分:3)
只需在@ Jack的答案中添加一个工作示例:
对于行专业和语言C
(不是c ++),但事情是一样的!
#include<stdio.h>
#define R 2
#define C 2
int main(){
int data1[R*C]={ 1, 2,
3, 4
};
int data2[R*C]={ 3, 5,
7, 8
};
int result[R*C]={0 };
int r,c;
for(r=0; r< R ; r++){
for(c=0; c< C ; c++){
result[r*C + c]= data1[r*C + c] + data2[r*C + c];
}
}
printf("\nMatrix SUM\n");
for(r=0; r< R ; r++){
for(c=0; c< C ; c++){
printf("%-3d ",result[r*C + c]);
}
printf("\n");
}
return 1;
}
输出:
Matrix SUM
4 7
10 12
您可以在codpade
看到它正常工作您可以使用宏来保持索引表达式的清洁,如下所示
#define INDEX(r, c) r*C + c
使用如下的宏:
data2[INDEX(r,c)];
你能注意到我的例子中的所有数组都是一维的,但我的编码风格就像我正在使用2-D矩阵。这不是魔术,但2D阵列在编译器级别下以类似的方式实现。