2013-03-10 104 views
1

我可以索引多維數組與單一索引?矩陣索引符號在C++

例:

在存儲器

,多維數組被索引像一個單一的陣列以矩陣2×2 (例如,矩陣[1] [1]是數組的第四元件, 「矩陣[ 3]「)是否有自動使用該表示法的系統?我想 想要寫矩陣[3]而不是矩陣[1] [1]:有可能嗎?

回答

6

根據您想要訪問數據的方式,您可以輕鬆使用單個索引或使用兩種方法。根據如何訪問或使用數據,接受兩個索引的方法可能是row-majorcolumn-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]; } 
} 
+0

傑克漂亮的解釋和很好的例子.. – 2013-03-10 17:09:01

+0

清楚!但如果我有一個三維數組? – volperossa 2013-03-10 18:02:09

+2

相同的原則適用於任何維度。唯一改變的是'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

3

只是增加一個工作示例用@傑克的回答是: 對於行大和語言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)]; 

你可以注意到,雖然我的例子中的所有數組都是一維的,但我的編碼風格就像我正在使用二維矩陣。這不是神奇的,但是二維數組在編譯器級別下以類似的方式實現。