Eigen::DenseBase没有数据成员

Eigen::DenseBase has no data member

为什么Eigen::DenseBase<Derived>没有data()方法?

我以为密集数组在内存中是连续的。

blocks也是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
}

DenseBase 是任何密集表达式的基础 class,包括 A+BA*B 等。如果您只想调用 std::sort ,然后移动到Eigen的头部,写上:

std::sort(x.begin(), x.end());

如果您传递给 f 的表达式有一个 .data() 成员,您仍然可以按如下方式访问它:x.derived().data().