MTL中向量、矩阵的初始化

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,上述方法可能不是最好的方法,如果我知道更好的方法,会及时更新的。

如果大家知道有更好的方法,麻烦给我留言,在此谢过。

你可能感兴趣的:(MTL中向量、矩阵的初始化)