c++ - C++中 vector 的指针算法

标签 c++ vector pointer-arithmetic

我有一个std::vector,即

vector<vector<vector> > > mdata;

我想将数据从我的 mdata vector 传递到 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());

如果我想将固定 i,j 的数据从 mdata 传递到 gsl_spline_init(),这很好。

但是,现在我需要传递 mdata 的第一个维度,因此对于固定的 j,k。

我知道对于任何两个固定索引,沿剩余维度的所有 vector 都具有相同的长度,因此我的 vector 是一个“常规立方体”。所以我需要的所有值之间的偏移量应该相同。

当然我可以创建一个临时 vector

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());

但这似乎太复杂了。也许有一种方法可以通过指针运算实现我的目标?

非常感谢任何帮助:)

最佳答案

如果不重新设计数组消费者函数 gsl_spline_init(),您真的无法做到这一点——它依赖于传递的数据是一个连续的数据 block 。这不是三级 vector 的情况 - 它不仅是一个立方体,而且每个级别都有一个分配在堆上的单独缓冲区。

关于c++ - C++中 vector 的指针算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333069/

相关文章:

r - 如何检测向量是特定向量的子集?

c++ - 如何解析带引号字段中嵌入逗号的 CSV?

c++ - lambda 可以转化为函数吗?

c++ - 对 vector 中的点进行排序以形成轮廓

c++ - 在 C++ 中选择运行时数组或 vector

c - C 中的数组赋值使用指针运算

在 c 中创建我自己的 memset 函数

c - 语句的输出怎么是 'E'

c++ - GCD 如果正数和负数

python - C++ 版本的 Python 循环 "for i, num in enumerate(list):"