我可以索引多维数组与单一索引?矩阵索引符号在C++
例:
在存储器,多维数组被索引像一个单一的阵列以矩阵2×2 (例如,矩阵[1] [1]是数组的第四元件, “矩阵[ 3]“)是否有自动使用该表示法的系统?我想 想要写矩阵[3]而不是矩阵[1] [1]:有可能吗?
我可以索引多维数组与单一索引?矩阵索引符号在C++
例:
在存储器,多维数组被索引像一个单一的阵列以矩阵2×2 (例如,矩阵[1] [1]是数组的第四元件, “矩阵[ 3]“)是否有自动使用该表示法的系统?我想 想要写矩阵[3]而不是矩阵[1] [1]:有可能吗?
根据您想要访问数据的方式,您可以轻松使用单个索引或使用两种方法。根据如何访问或使用数据,接受两个索引的方法可能是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]; }
}
只是增加一个工作示例用@杰克的回答是: 对于行大和语言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)];
你可以注意到,虽然我的例子中的所有数组都是一维的,但我的编码风格就像我正在使用二维矩阵。这不是神奇的,但是二维数组在编译器级别下以类似的方式实现。
杰克漂亮的解释和很好的例子.. – 2013-03-10 17:09:01
清楚!但如果我有一个三维数组? – volperossa 2013-03-10 18:02:09
相同的原则适用于任何维度。唯一改变的是'int data [W * H * D]'和'int get(int x,int y,int z){return data [W * H * z + W * y + x]}'。 – Jack 2013-03-10 18:18:24