我正在尝试定义macro
以将2D array
语法转换为1D vector
。即,对于12x12
数组,matrix[i,j]
应评估为matrix[12*i + j]
。到目前为止我已经尝试了
#define matrix[i,j] matrix[12*i+j]
#define (matrix[i,j]) matrix[12*i+j]
#define matrix[(i,j)] matrix[12*i+j]
#define matrix([i,j]) matrix[12*i+j]`
我使用matrix[i,j]
语法的原因是因为它将是从R代码调用的扩展,我希望项目的其他作者能够准确理解正在做什么。有没有办法用宏来做到这一点?
答案 0 :(得分:1)
您可以做的唯一方法是( )
,而不是[]
#define matrix(i,j) matrix[12*i+j]
在代码中,您以这种方式定义矩阵
int matrix[12*12];
matrix(i,j) = 5;
答案 1 :(得分:1)
这样的事情可能有用:
#define TO_1D(m,x,y) (m[x*12+y])
int matrix[100];
TO_1D(matrix, 0, 4) = 13;
但我想知道为什么你不喜欢更安全的东西:
int data[100];
inline int& matrix(int x, int y)
{
return data[x*12+y];
}
答案 2 :(得分:1)
最好只为计算定义一个宏,而不是解除引用。
#define X_DIM 12
#define Y_DIM 12
#define D21(x,y) (X_DIM*(x)+(y))
int my_matrix1[X_DIM*Y_DIM];
double my_matrix2[X_DIM*Y_DIM];
my_matrix1[D21(4, 3)];
my_matrix2[D21(2, 1)];
因此,您不仅限于宏中定义的唯一矩阵。
更基本的是,你为什么要尝试这样做?正常的多维数组语法就是这样做的。