簡體   English   中英

C ++:Matrix類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM