3

如何将一组 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);

谢谢,拉维。

4

4 回答 4

3

初始化它的大小与类型无关。所以:

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

// this is the type (no initialization)
matrix_type arrayM[arraySize];

问题来自初始化数组。你不能这样做:

TheClass::TheClass() :
arrayM(1, 3) // nope
{}

相反,您必须让它们默认构造,然后全部调整它们的大小:

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

由于您使用的是 boost,请考虑使用boost::array,因为它提供了更好的语法:

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));
}
于 2010-03-23T22:25:25.443 回答
3

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

class MyClass {
    std::vector<boost::numeric::ublas::matrix<double>> vectorM;
public:
    MyClass() : vectorM(10, boost::numeric::ublas::matrix<double>(5,7)) {
    }
};
于 2010-03-23T22:31:09.050 回答
3

我不清楚您到底要初始化什么,但是猜测(带有 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)
};
于 2010-03-23T22:36:31.037 回答
1

怎么样:

// 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));

std::tr1::array模板是对基本数组的(非常)薄包装,提供了便利的功能。例如,这里我使用assign()了 ,它用单个值填充整个数组。

于 2010-03-23T22:31:28.673 回答