为什么Eigen::DenseBase<Derived>
没有data()
方法?
我认为密集阵列在内存中将是连续的。
DenseBase也有块吗?
template <typename Derived>
void f(Eigen::DenseBase<Derived>& x) {
std::sort(x.data(), x.data() + x.size());
}
ArrayBase
也没有数据方法。
解决方法:
template <typename Derived>
void f(Eigen::DenseBase<Derived>& x) {
std::sort(&x[0], &x[0] + x.size()); // sort the whole vector
}
答案 0 :(得分:1)
DenseBase
是任何密集表达式(包括A+B
,A*B
等)的基类。如果只想调用std::sort
,则移到Eigen的头上,然后写:
std::sort(x.begin(), x.end());
如果您传递给f
的表达式具有.data()
成员,您仍然可以按以下方式访问它:x.derived().data()
。