C++ C++;,重定义运算符=,为矩阵指定子矩阵
在类矩阵中C++ C++;,重定义运算符=,为矩阵指定子矩阵,c++,matrix,assignment-operator,C++,Matrix,Assignment Operator,在类矩阵中 typedef std::vector < std::vector <double> > TItems; class Matrix { private : TItems items; public: double & operator() ( int r, int c ) {return items[r][c];} Matrix & operator = (co
typedef std::vector < std::vector <double> > TItems;
class Matrix
{
private :
TItems items;
public:
double & operator() ( int r, int c ) {return items[r][c];}
Matrix & operator = (const Matrix A, short r1, short r2, short c1, short c2 )
}
谢谢您的帮助。我认为最简单的解决方案是保持相同的类型,只需创建一个方法,创建一个更小的子矩阵(仍然是矩阵
),将值复制到中,然后按值返回
class Matrix {
public:
Matrix createSubMatrix(size_t ri, size_t ci, size_t rsz, size_t csz);
};
然后,您的添加、赋值等操作在尝试转换其他类型时不会产生额外的开销
你将支付
矩阵
副本的开销,但我不会在你的生活中强调这一点 要写入的矩阵的维度是否在更改?@Tom:赋值前后矩阵的维度不会更改…您必须创建一个子矩阵类,为该类定义运算符=()
(重载),并使矩阵::运算符()(int,int,int,int)
返回一个子矩阵。子矩阵只是矩阵的一个小代理,它保留了对矩阵和边界的引用。所有操作都被转发到主矩阵。@n.m.但在矩阵操作中会出现不同类型的操作(矩阵和子矩阵)。也许这会带来一些问题。运算符+也必须重新定义。。。
Matrix A(8,8), B (3,9), C(3,4), D(2, 3), E (8, 8);, F(8,8)
...
A(1,3,2,5) = B (0,2,5,8) + C(0,2,0, 3) + D;
F = A + E;
class Matrix {
public:
Matrix createSubMatrix(size_t ri, size_t ci, size_t rsz, size_t csz);
};