使用带有索引的stdlib函数而不是迭代器?

时间:2019-01-09 09:32:04

标签: c++ indexing iterator eigen

我想在std::partial_sum上使用Eigen::VectorXd,但是我在Eigen数据结构中根本找不到真正的迭代器。是否有某种快速的Iterator包装器在后台使用经典索引?还是有一种比通过索引重新实现部分总和更好的方法呢?

2 个答案:

答案 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/