C++中eigen类型的容器定义方法
一般容器定义
vector<int> int_1;
vector<double> double_1;
vector<float> float_1;
vector<char> char_1;
vector<bool> bool_1;
一般容器的定义这样声明即可,通过push_back向容器中压入数据,通过迭代器访问容器的内容。
eigen类型的容器定义
我们可以尝试像int/double/float/char/bool等类型一样定义eigen类型容器,如下所示:
<vector<Eigen::Matrix3d> Mat_3d;
但可以发现如此定义编译的时候不会报错,但运行的时候会有错误提示。
那么是为什么呢?
问题解决
其实只要把eigen容易的定义语句改为以下形式即可:
vector<Eigen::Matrix3d,Eigen::aligned_allocator<Eigen::Matrix3d>> Mat_3d;
-
上述的这段代码是C++容器的标准定义方式。
-
只是我们一般情况下定义容器的元素都是C++中的类型,所以可以省略,这是因为在C++11的标准中,aligned_allocator管理C++中的各种数据类型的内存方法是一样的,可以不需要着重写出来。
-
但是在Eigen管理内存和C++11中的方法是不一样的,所以需要单独强调元素的内存分配和管理。