使用stdlib函数进行索引而不是使用迭代器?

3

我想在Eigen::VectorXd上使用std::partial_sum,但我发现 Eigen 数据结构中根本没有迭代器。是否有一种快速的迭代器包装器,在底层使用经典索引?或者除了重新实现带索引的 partial sum,有什么好方法可以做到这一点?

2个回答

4
你可以随时获取你的数据的原始指针并与大小结合使用。
std::partial_sum(array.data(), array.data() + array.rows() * array.cols(), output.data());

虽然Eigen中有2D迭代器可用,但如果您想先迭代一个维度,然后再为每个元素迭代另一个维度,则可以使用它。


嗯,我刚刚发现了Eigen的Map函数。但那是另一种方式 :) - philx_x
是的,确实如此。我在我的代码中大量使用它 ;) - Matthieu Brucher

2

这项功能已于2018年10月实现,并将成为3.4版本的一部分。您可以在主干版本中使用它们,例如:

void foo(Eigen::VectorXd& in_out)
{
    std::partial_sum(in_out.begin(), in_out.end(), in_out.begin());
}

Godbolt演示(展示与std::vector近似的代码):https://godbolt.org/z/bFxcCA

如果您对细节感兴趣,请查看此(已合并)拉取请求:https://bitbucket.org/eigen/eigen/pull-requests/519/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接