C++ 如何创建boost矩阵数组?

C++ 如何创建boost矩阵数组?,c++,boost,arrays,matrix,ublas,C++,Boost,Arrays,Matrix,Ublas,如何将boost矩阵数组定义为成员变量 以下这些都不起作用 boost::numeric::ublas::matrix<double> arrayM(1, 3)[arraySize]; boost::numeric::ublas::matrix<double>(1, 3) arrayM[arraySize]; boost::numeric::ublas::matrix<double> arrayM[arraySize](1, 3); boost::numer

如何将boost矩阵数组定义为成员变量

以下这些都不起作用

boost::numeric::ublas::matrix<double> arrayM(1, 3)[arraySize];
boost::numeric::ublas::matrix<double>(1, 3) arrayM[arraySize];
boost::numeric::ublas::matrix<double> arrayM[arraySize](1, 3);
boost::numeric::ublas::矩阵arrayM(1,3)[arraySize];
boost::numeric::ublas::matrix(1,3)arrayM[arraySize];
boost::numeric::ublas::矩阵arrayM[arraySize](1,3);
谢谢,
Ravi.

初始化它时使用的大小与类型无关。因此:

// this makes things easier!
typedef boost::numeric::ublas::matrix<double> matrix_type;

// this is the type (no initialization)
matrix_type arrayM[arraySize];
相反,您必须让它们默认构造,然后调整它们的大小:

TheClass::TheClass()
{
    std::fill(arrayM, arrayM + arraySize, matrix_type(1, 3));
}

既然使用了Boost,请考虑使用<代码> Boo::数组,因为它给出了一个更好的语法:

typedef boost::numeric::ublas::matrix<double> matrix_type;
typedef boost::array<matrix_type, arraySize> matrix_array;

matrix_array arrayM; // ah

TheClass::TheClass()
{
    arrayM.assign(matrix_type(1, 3));
}
typedef boost::numeric::ublas::matrix\u type;
typedef boost::数组矩阵_数组;
矩阵_数组arrayM;//啊
类::类()
{
分配(矩阵_类型(1,3));
}

数组初始化使用默认构造函数。您可以改为使用向量:

class MyClass {
    std::vector<boost::numeric::ublas::matrix<double>> vectorM;
public:
    MyClass() : vectorM(10, boost::numeric::ublas::matrix<double>(5,7)) {
    }
};
class-MyClass{
向量向量机;
公众:
MyClass():向量(10,boost::numeric::ublas::matrix(5,7)){
}
};
那么:

// Assume: arraySize is a constant
// Assume: #include <boost/tr1/array.hpp>

typedef boost::numeric::ublas::matrix<double> doubleMatrixT;
std::tr1::array<doubleMatrixT, arraySize> arrayM;
arrayM.assign(doubleMatrixT(1, 3));
//假设:arraySize是一个常量
//假设:#包括
typedef boost::numeric::ublas::matrix doubleMatrixT;
std::tr1::数组arrayM;
arrayM.assign(doubleMatrixT(1,3));

std::tr1::array模板是一个(非常)薄的基本数组包装器,提供了方便的函数。例如,我在这里使用了
assign()
,它用一个值填充整个数组。

我不清楚您要初始化什么,但是猜测一下(数组中有arraySize项;数组中的每个项都用(1,3)初始化),我想出了这个,它编译了

const size_t arraySize = 3;
boost::numeric::ublas::matrix<double> arrayM[arraySize] = 
{
    boost::numeric::ublas::matrix<double>(1, 3),
    boost::numeric::ublas::matrix<double>(1, 3),
    boost::numeric::ublas::matrix<double>(1, 3)
};
const size\u t arraySize=3;
boost::numeric::ublas::矩阵arrayM[arraySize]=
{
boost::numeric::ublas::matrix(1,3),
boost::numeric::ublas::matrix(1,3),
boost::numeric::ublas::matrix(1,3)
};

Wow。你比我早2秒发了和我一模一样的东西。我印象深刻。这里有一个很好的链接来解释它,我将删除我的答案:
const size_t arraySize = 3;
boost::numeric::ublas::matrix<double> arrayM[arraySize] = 
{
    boost::numeric::ublas::matrix<double>(1, 3),
    boost::numeric::ublas::matrix<double>(1, 3),
    boost::numeric::ublas::matrix<double>(1, 3)
};