使用std::begin()、std::end()将ArrayXd转换为stl向量,
Use std::begin(), std::end() to convert ArrayXd to stl vector,
在我看来,我应该能够使用std::begin()
和std::end()
将ArrayXd
转换为std::vector<double>
;然而,当我在下面的代码中尝试它时,我的尝试失败了。我的理解是,任何Eigen
对象上的.data()
方法都会返回一个指向类似于c风格数组的连续内存块的指针。因此,由于我可以在c风格的数组上使用std::begin()
、std::end()
,所以我希望它也能用于.data()
。然而,Eigen类是模板化的,我认为这就是我遇到问题的原因,但我看不到解决这个问题的方法。应该如何做到这一点?
#include <iostream>
#include <vector>
#include <Eigen/Dense>
using namespace Eigen;
int main()
{
ArrayXd e_array(5);
e_array << 3,4,5,6,7;
double c_array[] = {1,2,3,4,5};
//Fails
// std::vector<double> my_vec(std::begin(e_array.data()), std::end(e_array.data()));
// Works
// std::vector<double> my_vec(e_array.data(), e_array.data() + 5);
// Works
// std::vector<double> my_vec(std::begin(c_array), std::end(c_array));
// Works
// std::vector<double> my_vec(c_array, c_array + 5);
return 0;
}
我的错误消息(第一行,整个消息很长):
错误:没有可用于调用的匹配函数'开始(特征::PlainObjectBase>::标量*)'std::vector my_vec(std::begin(e_array.data()),std::end(e_array.data())
std::begin(vec.data())
无法工作,因为data()返回的原始指针无法传达向量中的元素数量。这个版本是你最好的版本:
std::vector<double> my_vec(e_array.data(), e_array.data() + 5);
稍微好一点:
std::vector<double> my_vec(e_array.data(), e_array.data() + e_array.size());
您也可以使用许多容器,但不能使用Eigen的ArrayXd,因为它缺少begin()
和end()
(相关:http://eigen.tuxfamily.org/bz/show_bug.cgi?id=231)。
std::vector<double> my_vec(foo.begin(), foo.end());
相关文章:
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- Arduino编译器和STL:使用std::vector和std::map
- 如何将 STL 队列推送函数绑定到 std::函数?
- ostream 运算符<< 为获取 STL 容器而过载,传递 std::string 会破坏它?
- STL std::find() C++
- 为什么 STL 函数使用节点的颜色来计算 std::map 节点前身
- 比较两个std::矢量/阵列,或者通常比较两个stl连续器
- 用于 STL 迭代器、指针和 std::nullptr_t 的模板函数
- Visual Studio 2017 STL 可视化工具失败了一个 std::map<MyIntrusivePtr, std::tuple<....> >
- STL std::map 运算符 [] 在赋值的右侧
- 并行STL插入迭代器,例如std :: back_insert_iterator
- 使用 stl 排列 std::vector 元素的最短解决方案
- 不匹配的 std::某些 STL 容器的分配器
- C++ STL: std::find with std::map
- STL std::remove_copy
- 无法使用 std::function 作为参数类型(需要函数指针版本)宁愿像 STL 这样的模板,但随后它无法推断参数
- STD :: SET(或STD :: MAP)是否有一个提供基于值的查找的STL比较器?STD :: lands_les
- 为什么在<utility>std::p air(STL)中"is_convertible"?
- 使用具有STL容器和STD :: vector的特征类型
- C 11 std ::在不同的STL实现中使用哪些算法