使用特征动态类型进行统一初始化

时间:2014-01-22 10:37:00

标签: c++ vector eigen

我正在尝试学习Eigen C ++库,并想知道是否有一些很好的简写来初始化动态矢量和矩阵。写一些像你使用std::vector

这样的东西真的很不错
std::vector<int> myVec = {1,2,3,6,5,4,6};

VectorXi x = {1,2,3,4,7,5,7};

我能找到的最接近(丑陋)的等价物涉及Map。 。

int xc[] = {2,3,1,4,5};
Map<VectorXi> x(xc,sizeof(xc)/sizeof(xc[0]));

还有哪些其他初始化方法?

2 个答案:

答案 0 :(得分:1)

对于固定大小的矩阵/向量,您可以使用逗号初始值设定项:

Matrix3f m;
m<<1,2,3,4,5,6,7,8,9;

我现在无法测试它,但它应该适用于您的情况:

VectorXi x(5);
x << 2,3,1,4,5;

如果没有,您可以使用临时Vector,使用逗号初始化程序将其填充五个元素,然后将其分配给VectorXi。

编辑: 您可能也对此页面感兴趣:Eigen: Advanced Initialization

答案 1 :(得分:1)

通过您展示的代码,您可以编写const项目。所以也许你可以做类似

的事情
std::vector<int> vec;
const int init_vec[5] =  {1,2,3,4,5}
vec.assign(init_vec, init_vec + 5);

请参阅this post如何使用数组填充向量。

编辑:纠正错误的链接格式化。