у меня есть std :: vector, а именно
vector<vector<vector> > > mdata;
я хочу передать данные из моего вектора mdata в функцию GSL
gsl_spline_init(gsl_spline * spline, const double xa[], const double ya[], size_t size);
как я. я уже понял, что я могу делать такие вещи, как
gsl_spline_init(spline, &(mgrid.front()), &(mdata[i][j][k].front()), mgrid.size());
Это нормально, если я хочу передать данные из mdata для фиксированных i, j в gsl_spline_init ().
однако теперь мне нужно пройти по первому измерению mdata, поэтому для фиксированного j, k.
Я знаю, что для любых двух фиксированных индексов все векторы по оставшимся измерениям имеют одинаковую длину, поэтому мой вектор является «регулярным кубом». поэтому смещение между всеми необходимыми мне значениями должно быть одинаковым.
конечно, я мог бы создать временный вектор
int j = 123;
int k = 321;
vector<double> tmp;
for (int i = 0: i < mdata.size(); i++)
tmp.push_back(mdata[i][j][k]);
gsl_spline_init(spline, &(mgrid.front()), &(tmp.front()), mgrid.size());
но это кажется слишком сложным. возможно, есть способ достичь моей цели с помощью арифметики с указателями?
любая помощь очень ценится:)