如何将 stl 迭代器与 Eigen 一起使用?

ape*_*lle 1 c++ iterator std eigen3

我正在尝试在项目中使用库特征,并且必须对向量进行排序。我尝试遵循文档,它说该库应该以可预测的方式与 STL 迭代器和算法一起工作https://eigen.tuxfamily.org/dox-devel/group__TutorialSTL.html。\n但是当我尝试运行以下测试代码

\n\n
#include <iostream>\n#include <algorithm>\n#include <eigen3/Eigen/Dense>\n#include <eigen3/Eigen/Core>\nint main()\n{\n    Eigen::Array4i v = Eigen::Array4i::Random().abs();\n    std::cout << "Here is the initial vector v:\\n" << v.transpose() << "\\n";\n    std::sort(v.begin(), v.end());\n    std::cout << "Here is the sorted vector v:\\n" << v.transpose() << "\\n";\n    return 0;\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到以下两个错误:

\n\n
error: \xe2\x80\x98Eigen::Array4i\xe2\x80\x99 {aka \xe2\x80\x98class Eigen::Array<int, 4, 1>\xe2\x80\x99} has no member named \xe2\x80\x98begin\xe2\x80\x99\n9 | std::sort(v.begin(), v.end());\n  |             ^~~~~\nerror: \xe2\x80\x98Eigen::Array4i\xe2\x80\x99 {aka \xe2\x80\x98class Eigen::Array<int, 4, 1>\xe2\x80\x99} has no member named \xe2\x80\x98end\xe2\x80\x99\n9 | std::sort(v.begin(), v.end());\n
Run Code Online (Sandbox Code Playgroud)\n\n

我用 gcc 9.1.0 和 7.4.0 进行了测试,我的 Eigen 版本是 3.3.4。我使用的是 Ubuntu 18.04,该库位于通常的位置 /usr/include。我尝试的所有其他功能似乎都能正常工作。\n这是一个众所周知的错误,是编译器问题还是版本问题?

\n

RHe*_*tel 6

如果你不想等待 Eigen 3.4 的发布,你可以使用这个:

std::sort(v.data(), v.data() + v.size());
Run Code Online (Sandbox Code Playgroud)

.data()方法可以替换缺失的.begin(),但该.end()方法必须手动构造。