听起来像你有
{
for (int j=0; j
a_function(index1, j);
}
}
那为什么不使用
double c[SIZE];
double a_function(double c[], int index1)
{
switch(index1)
{
case 1:
return c(1)*c(2)*c(5)*c(3);
...
}
}
{
double c[SIZE];
for (int i=SIZE; i--; ) {
c[i] = a[i];
}
for (int j=0; j
c[j] = b[j];
... = a_function(c, index1);
c[j] = a[j];
}
}
PS —无论使用哪种方法,您的巨型开关都可以更好地实现为函数指针的查找表。
typedef double (*transform_t)(double*);
double transform1(double* c) { return c[1]*c[2]*c[5]*c[3]; }
double transform2(double* c) { return c[6]*cos(c[77])*exp(c[95]); }
...
double transform100(double* c) { return exp(c[20])*sin(c[21]); }
transform_t transforms[100] = {
transform1,
transform2,
...
transform100,
};
{
double c[SIZE];
for (int i=SIZE; i--; ) {
c[i] = a[i];
}
...
for (int j=0; j
c[j] = b[j];
... = (transforms[index1])(c);
c[j] = a[j];
}
}
更新 :我刚刚注意到“ a和b无法修改,因此它们是只读的!”。 已调整。
更新 :添加了替代switch语句的建议。