簡體   English   中英

使用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樣式數組。 因此,由於我可以在ac樣式數組上使用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;
}

我的錯誤消息(第一行,整個消息很長):

錯誤:沒有匹配的函數來調用'begin(Eigen :: PlainObjectBase> :: Scalar *)'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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM