MTL的类定义很有特点, 对向量类而言, 定义了两个类, 分别负责用一个值初始化和用数组初始化。这两个类分别是
typedef dense1D<double> VectorContainer;
typedef external_vec<double> VectorExtern;
其中VectorContain分配内存,并且用resize(size_t)函数重新分配内存;
VectorExtern不分配内存,只负责将数组导入对象中。如果想在类中定义一个向量作为成员变量,应该使用VectorContainer。
初始化时:
VectorContainer vv(10,1.0);
double dd[3] = {1.0,2.0,3.0};
VectorExtern vvv(dd,3);
对矩阵而言,使用模板类matrix,在运行时生成两个类:
typedef matrix< double,
rectangle<>,
dense<external>,
row_major >::type EMatrix;
typedef matrix< double,
rectangle<>,
dense<>,
row_major >::type CMatrix;
和向量一样,EMatrix不分配内存,CMatrix可以分配内存
当新建一个矩阵时,可以
CMatrix matrix(row,col);
如果已经有了n维数组,想用数组建立一个矩阵,可以
double da[row*col];
EMatrix matrix(da,row,col);
如果有了n个n维向量,想建立一个n×n的矩阵,可以
CMatrix matrix(row,col);
mtl::copy(vec0,matrix[0] );
mtl::copy(vec1,matrix[1]);
我也是刚接触MTL,上述方法可能不是最好的方法,如果我知道更好的方法,会及时更新的。
如果大家知道有更好的方法,麻烦给我留言,在此谢过。