我有一维数组
治疗一维数组二维
int* a = new int[n * m];
,我需要把它当作二维即
a[i][j] = a[n * i + j]
我已经试过玩弄使用指令并搜索了很多。但没有为我工作。
有没有办法做到这一点? SMT。像define a[i][j] a[n * i + j]
?
谢谢。
我有一维数组
治疗一维数组二维
int* a = new int[n * m];
,我需要把它当作二维即
a[i][j] = a[n * i + j]
我已经试过玩弄使用指令并搜索了很多。但没有为我工作。
有没有办法做到这一点? SMT。像define a[i][j] a[n * i + j]
?
谢谢。
既然你用C++编程可以创建一个包装级保持的阵列,且有一个operator[]
函数返回一个代理对象,其operator[]
函数执行n * i + j
计算,并返回到想要元素的引用。
或者,您可以创建一个内联函数或类似函数的宏,它将数组和索引作为参数并返回元素。
但是没有类似Sams answer包装类的黑客,没有办法像你想要的那样获得一个“真正的”数组数组。
您需要定义包含指针的第二个数组。事情是这样的:
int **b=new int *[m];
for (int i=0; i<m; ++i)
b[i]=&a[i*n];
之后,b[i][j]
将参考a[n*i+j]
。
尽管这是一个可行的解决方案,但它确实存在一些单个“阵列”不能解决的问题,主要是关于局部性和CPU缓存。 –
我不想分配指针数组,然后为每个指针分配内存。我只想替换'a [i] [j] = a [n * i + j]' –
@T_Igor请注意,答案中的代码实际上并没有按照您的想法做。循环不分配内存,只是分配。 –
我觉得你有没有搜索http://stackoverflow.com/questions/7492842/convert-one-dimensional-arrary-to-two-dimensional-in-c –
任何'array_view',或GSL的'跨度'类,应该能够做到这一点,而不会改变任何有关数组本身。 – chris
我想你只有一个分配,因为你想要数据是连续的? –