1

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

前任:

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

4

2 回答 2

6

根据您想要访问数据的方式,您可以轻松地使用单个索引或使用两种方法。根据访问或使用数据的方式,接受两个索引的方法可以是行优先列优先。当然,要做到这一点,您需要将矩阵存储在单维数组中。例如:

class Matrix {
  int data[W*H];

  int get(int i) { return data[i]; }
  int get(int x, int y) { return data[y*W+x]; }
}
于 2013-03-10T17:06:29.253 回答
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  

你可以看到它在copade工作

您可以使用宏来保持索引表达式干净,如下所示

#define INDEX(r, c)  r*C + c

使用如下宏:

data2[INDEX(r,c)];  

您是否注意到虽然我的示例中的所有数组都是一维的,但我的编码风格就像我正在使用二维矩阵一样。这并不神奇,但二维数组在编译器级别以类似的方式实现。

于 2013-03-10T17:24:05.423 回答