我可以索引多維數組與單一索引?矩陣索引符號在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