将一维数组视为二维数组

时间:2016-05-16 12:33:28

标签: c++ preprocessor-directive

我有一维阵列

int* a = new int[n * m];

我需要将其视为二维,即

a[i][j] = a[n * i + j]

我尝试过使用指令和google很多。但没有什么对我有用 有没有办法这样做? SMT。比如define a[i][j] a[n * i + j]
感谢。

2 个答案:

答案 0 :(得分:2)

您需要定义包含指针的第二个数组。像这样:

int **b=new int *[m];

for (int i=0; i<m; ++i)
     b[i]=&a[i*n];

之后,b[i][j]将引用a[n*i+j]

答案 1 :(得分:1)

由于您使用C ++进行编程,您可以创建一个包含数组的包装类,并且具有operator[]函数,该函数返回operator[]函数执行n * i + j的代理对象计算并返回对所需元素的引用。

或者你可以创建一个内联函数或类似函数的宏,它将数组和索引作为参数并返回元素。

但是如果没有类似于Sams answer包装类中的黑客,那就无法获得你想要的“真正”数组数组。