如何将增强矩阵数组定义为成员变量?
以下都没有奏效。
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);
谢谢, 拉维。
答案 0 :(得分: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));
}
答案 1 :(得分:3)
数组初始化使用默认构造函数。您可以改为使用向量:
class MyClass {
std::vector<boost::numeric::ublas::matrix<double>> vectorM;
public:
MyClass() : vectorM(10, boost::numeric::ublas::matrix<double>(5,7)) {
}
};
答案 2 :(得分: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)
};
答案 3 :(得分: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()
,它用单个值填充整个数组。