2016-05-16 74 views
0

我有一维数组
治疗一维数组二维

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

,我需要把它当作二维即

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

我已经试过玩弄使用指令并搜索了很多。但没有为我工作。
有没有办法做到这一点? SMT。像define a[i][j] a[n * i + j]
谢谢。

+0

我觉得你有没有搜索http://stackoverflow.com/questions/7492842/convert-one-dimensional-arrary-to-two-dimensional-in-c –

+0

任何'array_view',或GSL的'跨度'类,应该能够做到这一点,而不会改变任何有关数组本身。 – chris

+0

我想你只有一个分配,因为你想要数据是连续的? –

回答

1

既然你用C++编程可以创建一个包装级保持的阵列,且有一个operator[]函数返回一个代理对象,其operator[]函数执行n * i + j计算,并返回到想要元素的引用。

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

但是没有类似Sams answer包装类的黑客,没有办法像你想要的那样获得一个“真正的”数组数组。

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]

+0

尽管这是一个可行的解决方案,但它确实存在一些单个“阵列”不能解决的问题,主要是关于局部性和CPU缓存。 –

+0

我不想分配指针数组,然后为每个指针分配内存。我只想替换'a [i] [j] = a [n * i + j]' –

+0

@T_Igor请注意,答案中的代码实际上并没有按照您的想法做。循环不分配内存,只是分配。 –