如何将一组 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);
谢谢,拉维。
初始化它的大小与类型无关。所以:
// 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));
}
数组初始化使用默认构造函数。您可以改用向量:
class MyClass {
std::vector<boost::numeric::ublas::matrix<double>> vectorM;
public:
MyClass() : vectorM(10, boost::numeric::ublas::matrix<double>(5,7)) {
}
};
我不清楚您到底要初始化什么,但是猜测(带有 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)
};
怎么样:
// 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()
了 ,它用单个值填充整个数组。