C++ 如何为特征矩阵创建STL输出迭代器?

C++ 如何为特征矩阵创建STL输出迭代器?,c++,stl,iterator,eigen,C++,Stl,Iterator,Eigen,假设你有一个特征::矩阵m。现在,您有了Eigen之外的数据,并希望使用STL算法(例如,std::transform)将其移动到矩阵中。给出了如何在基于范围的for循环中使用m.rowwise()的示例。但是,将m.rowwise()作为std::transform的输出迭代器传递是不起作用的。它抱怨VectorwiseOp没有操作符+。基于范围的for循环无论如何都会调用范围表达式的begin()方法,但是VectorwiseOpAbegin()方法 假设我有一个std::vector I。

假设你有一个
特征::矩阵m。现在,您有了Eigen之外的数据,并希望使用STL算法(例如,
std::transform
)将其移动到矩阵中。给出了如何在基于范围的for循环中使用
m.rowwise()
的示例。但是,将
m.rowwise()
作为
std::transform
的输出迭代器传递是不起作用的。它抱怨
VectorwiseOp
没有
操作符+
。基于范围的for循环无论如何都会调用范围表达式的
begin()
方法,但是
VectorwiseOp
A
begin()
方法

假设我有一个
std::vector I。如何将其转换为矩阵?当然,这里可以在索引变量上使用普通循环,但当使用更复杂的输入数据结构时,这会变得很困难。然后,可以使用
std::for_each
并在外部维护输出索引,但这似乎很笨拙。我在找像这样的东西

std::transform(
    i.cbegin(),
    i.cend(),
    /* TODO: something like m.rowwise() */,
    [](const std::tuple<float, float, float> &e) -> /* TODO */ {
        /* don't care here */
    });
std::transform( i、 cbegin(), i、 cend(), /*TODO:类似于m.rowwise()*/,的内容, [](常量std::tuple&e)->/*TODO*/{ /*我不在乎这里*/ });
Eigen::VectorwiseOp
获得适当的
开始
结束
在Eigen 3.4中,您正在查看3.3的源代码

如果你升级到3.4,它很简单

std::transform(
    i.cbegin(),
    i.cend(),
    m.rowwise().begin(),
    [](const std::tuple<float, float, float> &e) -> decltype(*m.rowwise().begin()) {
        /* don't care here */
    });
std::transform( i、 cbegin(), i、 cend(), m、 行(), [](常量std::tuple&e)->decltype(*m.rowwise().begin()){ /*我不在乎这里*/ });
我注意到目前主页上说“最新的稳定版本是Eigen 3.3.7。”