无法写入矩阵<vector <vector <double>&gt;宾语

时间:2018-04-21 21:20:21

标签: c++ matrix stl

我使用vector&lt;创建了一个矩阵类。矢量&gt; 结构体。创建时,矩阵用零填充(可能不是最好的方法,我打算改变它)。 这个类的标题是这样的:

class Matrix{
public:
    /*Basic constructor, accepts matrix dimensions
    Matrix(int nr, int nc);

    /*return element i,j*/
    double elem(int i, int j);

    /*operator () overloading - same thing as previous method*/
    double operator()(int i, int j);

private:
    vector<vector<double> > Matrix_;
    int nr_, nc_;
};

虽然实施是:

//CONSTRUCTOR
Matrix::Matrix(int nrows, int ncols)
    {
    nc_ = ncols;
    nr_ = nrows;

/*creates rows*/
    for (int i = 0; i < nrows; i++)
        {
        vector<double> row;
        Matrix_.push_back(row);
        }
/*Fills matrix with zeroes*/
    for (int i = 0; i < nr_; i++)
        {
        for (int j = 0; j < nc_; j++)
            {
            Matrix_[i].push_back(0);
            }
        }

    }

/*method returning i,j element of the matrix (I overloaded () to do the same)*/
double Matrix::elem(int i, int j)
    {
    return Matrix_[i][j];
    }


/*operator () overloading*/
double Matrix::operator()(int i, int j)
    {
    return Matrix_[i][j];
    }

最后,在主程序中我有:

Matrix m1(rows, cols);
for (int i=0; i<rows; i++)
    {
    for (int j=0; j<cols; j++)
        {
        m1(i,j) = i*j;
        /*OR, using the other method*/
        m1.elem(i,j) = i*j;
        }
    }

问题是我总是返回错误:

matrix.cpp:55:27: error: lvalue required as left operand of assignment
m1.elem(i,j) = i*j;

无论我使用方法.elem()还是operator()。 所以,我想问题是我没有以正确的方式访问元素来改变他们的价值观,但我不明白为什么。 任何建议都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

为了能够修改矩阵元素,您需要返回对它的引用:

double& Matrix::elem(int i, int j) {
    return Matrix_[i][j];
}

double& Matrix::operator()(int i, int j) {
    return Matrix_[i][j];
}

您还可以为const矩阵添加这些内容:

double Matrix::elem(int i, int j) const {
    return Matrix_[i][j];
}

double Matrix::operator()(int i, int j) const {
    return Matrix_[i][j];
}