我需要使用GNU-GSL插值函数,如下所示:
double gsl_interp_eval (const gsl_interp * interp, const double xa[], const double ya[], double x, gsl_interp_accel * acc)
但是我需要的 xa [] 和 ya [] 数组是这些对象描述的元素A.x和A.y.value:
class c_ys {
double value;
};
struct s_points {
double x;
c_ys y;
};
class c_curves {
vector<s_points> A;
};
如何在函数gsl_interp_eval中将这些元素用作第二个和第三个参数?
答案 0 :(得分:2)
如果不制作副本,您将无法执行此操作,因为double
成员之间内存中的偏移量不正确。
以下是如何做到这一点:
double *x = new double[A.size()];
double *y = new double[A.size()];
for (int i = 0 ; i != A.size() ; i++) {
x[i] = A[i].x;
y[i] = A[i].y.value;
}
gsl_interp_eval(...); // call your function
delete[] x;
delete[] y;