C++ 无法写入矩阵<;向量<;向量<;双倍>&燃气轮机;对象
我使用vectorC++ 无法写入矩阵<;向量<;向量<;双倍>&燃气轮机;对象,c++,matrix,stl,C++,Matrix,Stl,我使用vector 结构。创建时,矩阵中填充了零(可能不是最好的方法,我正计划更改它)。 类的标题如下所示: 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 - sa
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_;
};
无论我使用的是方法.elem()还是运算符()。
所以,我想问题是我没有以正确的方式访问元素来改变它们的值,但我不明白为什么。
如有任何建议,将不胜感激,谢谢 为了能够修改矩阵元素,您需要返回对它的引用:
double& Matrix::elem(int i, int j) {
return Matrix_[i][j];
}
以及:
您还可以为const
矩阵添加这些:
double Matrix::elem(int i, int j) const {
return Matrix_[i][j];
}
以及:
您需要返回一个引用
double&Matrix::operator()(inti,intj)
。同样对于Matrix::elem
[OT]您的构造函数可以简化为:Matrix::Matrix(int nrows,int ncols):Matrix(nrows,std::vector(ncols,0.)、nr(nrows)、nc(ncols){}
[OT]:nr
和nc
是不需要的,Matrix.size()
和Matrix[0].size>具有相同的信息。(除非使用唯一的std::vector
展平数据并手动计算索引)
matrix.cpp:55:27: error: lvalue required as left operand of assignment
m1.elem(i,j) = i*j;
double& Matrix::elem(int i, int j) {
return Matrix_[i][j];
}
double& Matrix::operator()(int i, int j) {
return Matrix_[i][j];
}
double Matrix::elem(int i, int j) const {
return Matrix_[i][j];
}
double Matrix::operator()(int i, int j) const {
return Matrix_[i][j];
}