[英]C++: Matrix class
有人(謝謝)為我發布了一個矩陣類構造,以便我可以動態調整它。
我試圖增強它,以便我可以獲得並設置單個值。
class Matrix
{
public:
Matrix(std::size_t rows, std::size_t cols) : _matrix(rows, std::vector<float>(cols))
{
for (unsigned long r=0;r<rows+1;r++)
{
vector <float>nRow;
nRow.resize(cols+1);
for (unsigned long i=0;i<cols+1)
{
nRow[i]=0;//initialize to zero
}
_matrix.push_back(nRow);
}
}
// this is my own attempt to access the items:
float Value(unsigned long row,unsigned long col) : _matrix[row][col];
private:
std::vector<std::vector<float>> _matrix;
};
我想我可以訪問這樣的單個項目:
Matrix m(100,100);
m[5,5]=15;
但我猜線條
float Value(unsigned long row,unsigned long col) : _matrix[row][col];
和
m[5,5]=15;
錯了。 它們不會編譯各種錯誤。
你沒有重載[]
運算符(我不建議)。 您應該通過函數Value()
訪問。 所以:
m.Value(5,5);
也,
float Value(unsigned long row,unsigned long col) : _matrix[row][col];
不是我所知道的功能或功能簡寫。 它應該是:
float Value(unsigned long row,unsigned long col)
{
return _matrix[row][col]
}
在這段代碼:
float Value(unsigned long row,unsigned long col) : _matrix[row][col];
這不是有效的c ++聲明。 初始化列表僅對構造函數有效,最終,情況並非如此。
另外,你不能使用這種對象構造調用: m[5,5]
。 支架操作員必須只有一個參數。
為了解決您的問題,我建議您使用operator overload operator()
。 它可以有任意數量的參數,因此,用以下函數代替:
float& operator()(unsigned long row, unsigned long col)
{
return _matrix[row][col];
}
現在,你可以這樣打電話:
m(5, 5) = 15;
b = m(5,5);
缺點是你通過這個操作符暴露了你的類的內部,這打破了封裝原則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.