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+B
、A*B
等。如果您只想调用 std::sort
,然后移动到Eigen的头部,写上:
std::sort(x.begin(), x.end());
如果您传递给 f
的表达式有一个 .data()
成员,您仍然可以按如下方式访问它:x.derived().data()
.
为什么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+B
、A*B
等。如果您只想调用 std::sort
,然后移动到Eigen的头部,写上:
std::sort(x.begin(), x.end());
如果您传递给 f
的表达式有一个 .data()
成员,您仍然可以按如下方式访问它:x.derived().data()
.