繁体   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