gpt4 book ai didi

c++ - 使用 std::begin()、std::end() 将 ArrayXd 转换为 STL vector ,

转载 作者:行者123 更新时间:2023-11-30 01:16:35 26 4
gpt4 key购买 nike

在我看来,我应该可以使用 std::begin()std::end()转换 ArrayXdstd::vector<double> ;但是,当我在下面的代码中尝试时,我的尝试失败了。我的理解是 .data()任何 Eigen 上的方法object 返回一个指向连续内存块的指针,类似于 c 风格的数组。因此,因为我可以使用 std::begin() , std::end()在 c 样式数组上,我希望它可以与 .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;
}

我的错误信息(第一行,整条信息很长):

error: no matching function for call to ‘begin(Eigen::PlainObjectBase >::Scalar*)’ std::vector my_vec(std::begin(e_array.data()), std::end(e_array.data()))

最佳答案

std::begin(vec.data()) 无法工作,因为 data() 返回一个无法传达 vector 中元素数量的原始指针。这个版本是你们最好的版本:

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());

关于c++ - 使用 std::begin()、std::end() 将 ArrayXd 转换为 STL vector ,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26291861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com