C++ 生成类的Boost矩阵属性

C++ 生成类的Boost矩阵属性,c++,boost,C++,Boost,我想制作一个Boost矩阵作为我的类的属性吸附质。我事先知道是(3,2)。我想做: #include <boost/numeric/ublas/matrix.hpp> using namespace boost::numeric::ublas; class Adsorbate { matrix<double> m(3,2); }; 如何执行此操作?只需在构造函数中初始化它: class Adsorbate { private: matrix<do

我想制作一个Boost矩阵作为我的类的属性
吸附质
。我事先知道是(3,2)。我想做:

#include <boost/numeric/ublas/matrix.hpp>
using namespace boost::numeric::ublas;

class Adsorbate {
    matrix<double> m(3,2);
};

如何执行此操作?

只需在构造函数中初始化它:

class Adsorbate {
private:
    matrix<double> m;
public:
    Adsorbate() : m(3, 2) {}
    // ...
};

只需在构造函数中初始化它:

class Adsorbate {
private:
    matrix<double> m;
public:
    Adsorbate() : m(3, 2) {}
    // ...
};

关于如何创建矩阵数组,您正在询问如何为C++数据结构创建C数组。调用malloc不会正确初始化数组中的矩阵,如果ublas::matrix的实例使用动态内存,调用“free”也不会释放动态内存,初始化实例失败和销毁实例失败都是严重的错误,因为事情可能会正常进行,根据原始内存的内容,它可以是全零或应用程序可以处理的内容,但也可以是导致灾难性故障的垃圾。Malloc只会返回实例的内存,但在内部,一个包含ublas::matrix实例的吸附质实例可能会认为它有指向内存或其他任何对象的有效指针

要正确初始化阵列的各个成员,
吸附质*吸附质=新吸附质[200]
将对所有吸附质实例使用默认构造函数

您可以使吸附质的默认构造函数使用3,2构造其成员
m

结构吸附质{
吸附物():m{3,2},…或此处的其他实例初始化…{…此处的任意构造函数代码…}
...
}

不建议使用阵列。建议的方法是创建一个
std::vector
。使用std::vector可能看起来更复杂,但事实并非如此,它会阻止您做一些显然更简单的事情,而这些事情对您来说可能是灾难性的


如果坚持使用裸数组,请确保
delete[]
数组而不是
delete
。不同之处在于,<代码>删除>代码>只调用一个元素的析构函数。

关于如何创建矩阵数组,您正在询问如何为C++数据结构创建C数组。调用malloc不会正确初始化数组中的矩阵,如果ublas::matrix的实例使用动态内存,调用“free”也不会释放动态内存,初始化实例失败和销毁实例失败都是严重的错误,因为事情可能会正常进行,根据原始内存的内容,它可以是全零或应用程序可以处理的内容,但也可以是导致灾难性故障的垃圾。Malloc只会返回实例的内存,但在内部,一个包含ublas::matrix实例的吸附质实例可能会认为它有指向内存或其他任何对象的有效指针

要正确初始化阵列的各个成员,
吸附质*吸附质=新吸附质[200]
将对所有吸附质实例使用默认构造函数

您可以使吸附质的默认构造函数使用3,2构造其成员
m

结构吸附质{
吸附物():m{3,2},…或此处的其他实例初始化…{…此处的任意构造函数代码…}
...
}

不建议使用阵列。建议的方法是创建一个
std::vector
。使用std::vector可能看起来更复杂,但事实并非如此,它会阻止您做一些显然更简单的事情,而这些事情对您来说可能是灾难性的

如果坚持使用裸数组,请确保
delete[]
数组而不是
delete
。区别在于
delete
只调用一个元素的析构函数

std::vector<Adsorbate> adsorbates(200);