Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;,重定义运算符=,为矩阵指定子矩阵_C++_Matrix_Assignment Operator - Fatal编程技术网

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);
};