我有一维阵列
int* a = new int[n * m];
我需要将其视为二维,即
a[i][j] = a[n * i + j]
我尝试过使用指令和google很多。但没有什么对我有用
有没有办法这样做? SMT。比如define a[i][j] a[n * i + j]
?
感谢。
答案 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包装类中的黑客,那就无法获得你想要的“真正”数组数组。