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
Abegin()
方法
假设我有一个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。”