我想在std::partial_sum上使用Eigen::VectorXd,但是我在Eigen数据结构中根本找不到真正的迭代器。是否有某种快速的Iterator包装器在后台使用经典索引?还是有一种比通过索引重新实现部分总和更好的方法呢?
答案 0 :(得分:4)
您始终可以获取指向数据的原始指针,并将其与大小结合使用。
std::partial_sum(array.data(), array.data() + array.rows() * array.cols(), output.data());
如果要先遍历一个维度,然后再遍历每个元素的另一个维度,则Eigen中有2D迭代器可用。
答案 1 :(得分: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/