将 stdlib 函数与索引一起使用而不是迭代器?
use stdlib functions with indexing instead of Iterators?
我想使用 std::partial_sum on Eigen::VectorXd 但我根本找不到 Eigen 数据结构中的迭代器。是否有某种快速迭代器包装器在后台使用经典索引?或者有什么好方法可以代替使用索引重新实现部分求和?
您始终可以获得指向数据的原始指针并将其与大小结合使用。
std::partial_sum(array.data(), array.data() + array.rows() * array.cols(), output.data());
不过,如果您想先遍历一个维度,然后为每个元素遍历另一个维度,则 Eigen 中提供了二维迭代器。
这已于 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/
我想使用 std::partial_sum on Eigen::VectorXd 但我根本找不到 Eigen 数据结构中的迭代器。是否有某种快速迭代器包装器在后台使用经典索引?或者有什么好方法可以代替使用索引重新实现部分求和?
您始终可以获得指向数据的原始指针并将其与大小结合使用。
std::partial_sum(array.data(), array.data() + array.rows() * array.cols(), output.data());
不过,如果您想先遍历一个维度,然后为每个元素遍历另一个维度,则 Eigen 中提供了二维迭代器。
这已于 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/