假设您有一个Eigen::Matrix<float, Eigen::Dynamic, 3> m;
。现在您已经在Eigen之外获得了数据,并希望使用STL算法(例如std::transform
)将其移入矩阵。 documentation提供了有关如何在基于范围的for循环中使用m.rowwise()
的示例。但是,将m.rowwise()
传递为std::transform
的输出迭代器是行不通的。它抱怨VectorwiseOp
没有operator++
。基于范围的for循环无论如何都会调用范围表达式的begin()
方法,但是VectorwiseOp
does not have是begin()
方法。
说我有一个std::vector<std::tuple<float, float, float>> 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 */
});
答案 0 :(得分:1)
Eigen::VectorwiseOp<ET, D>
在Eigen 3.4中获得了适当的begin
和end
,而您正在寻找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 */
});