我有一个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());
但这似乎太复杂了。也许有一种方法可以用指针算法实现我的目标?
非常感谢任何帮助:)
答案 0 :(得分:1)
如果不重新设计数组使用者函数gsl_spline_init(),你真的不能这样做 - 它依赖于作为连续数据块传递的数据。三级向量不是这种情况 - 不仅它是一个多维数据集,而且每个级别都有一个在堆上分配的单独缓冲区。
答案 1 :(得分:1)
这不可能。不仅使用向量,而且即使使用普通数组,最后一个维度也只是一个连续的数据块。如果gsl_spline_init
使用迭代器而不是数组,你可以尝试制作一些仿函数来选择合适的数据,但我不确定它是否值得尝试。没有指针算术可以帮助你。