C ++中的矩阵索引表示法

时间:2013-03-10 17:02:35

标签: c++ multidimensional-array matrix indexing

我可以使用单个索引索引多维数组吗?

例如:

  

在内存中,多维数组的索引类似于单个数组   (例如在矩阵2x2中,矩阵[1] [1]是数组的第四个元素,   “matrix [3]”)是否有系统自动使用此表示法?一世   想写写矩阵[3]而不是矩阵[1] [1]:可能吗?

2 个答案:

答案 0 :(得分: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]; }
}

答案 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阵列在编译器级别下以类似的方式实现。