如何定義一個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矩陣數組作爲成員變量?如何創建一個增強矩陣數組?
以下都不是。
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::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)) {
}
};
如何:
// 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()
,它用一個值填充整個數組。
我不清楚你到底想要初始化什麼,但是猜測(數組中有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)
};
哇。你在我之前2秒發佈了與我完全相同的內容。我印象深刻。這裏有一個很好的鏈接來解釋它,我會刪除我的答案:http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.5 – 2010-03-23 22:37:32