将一维数组视为二维数组
Treat one-dimensional array as two-dimensional
我有一个一维数组
int* a = new int[n * m];
我需要将其视为二维的,即
a[i][j] = a[n * i + j]
我试过使用指令并在谷歌上搜索了很多。但对我没有任何帮助。
有什么办法吗? SMT。喜欢 define a[i][j] a[n * i + j]
?
谢谢
您需要定义第二个包含指针的数组。像这样:
int **b=new int *[m];
for (int i=0; i<m; ++i)
b[i]=&a[i*n];
之后,b[i][j]
将引用a[n*i+j]
。
由于您使用 C++ 编程,您可以创建一个包装器 -class 来保存数组,并具有一个 operator[]
函数,该函数 return 是一个代理对象,其 operator[]
函数执行 n * i + j
计算和 return 对所需元素的引用。
或者,您可以创建一个内联函数或类似函数的宏,它将数组和索引作为参数,return 元素。
但是如果没有像 包装器 classes 中那样的黑客攻击,就无法获得您想要的 "true" 数组数组。
我有一个一维数组
int* a = new int[n * m];
我需要将其视为二维的,即
a[i][j] = a[n * i + j]
我试过使用指令并在谷歌上搜索了很多。但对我没有任何帮助。
有什么办法吗? SMT。喜欢 define a[i][j] a[n * i + j]
?
谢谢
您需要定义第二个包含指针的数组。像这样:
int **b=new int *[m];
for (int i=0; i<m; ++i)
b[i]=&a[i*n];
之后,b[i][j]
将引用a[n*i+j]
。
由于您使用 C++ 编程,您可以创建一个包装器 -class 来保存数组,并具有一个 operator[]
函数,该函数 return 是一个代理对象,其 operator[]
函数执行 n * i + j
计算和 return 对所需元素的引用。
或者,您可以创建一个内联函数或类似函数的宏,它将数组和索引作为参数,return 元素。
但是如果没有像