gpt4 book ai didi

C++,重新定义运算符=,给矩阵赋一个子矩阵

转载 作者:太空狗 更新时间:2023-10-29 23:07:19 25 4
gpt4 key购买 nike

在矩阵类中

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 )

}

我正在尝试重新定义运算符 = 以便能够将子矩阵分配给矩阵。

Matrix  & operator = (const Matrix &A, short r1, short r2, short c1, short c2)
{
Matrix A_sub( r2 - r1 + 1, c2 - c1 + 1 );

for ( int i = 0; i < ( r2 - r1 + 1 ); i++ )
{
for ( unsigned int j = 0; j < ( c2 - c1 + 1); j++ )
items[i][j] = A (r1 + i, c1 + j );
}

return *this;
}

但这样的定义是不可能的...如果需要这样的表示法,如何解决问题?

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;

感谢您的帮助。

最佳答案

我认为最简单的解决方案是保持相同的类型,只创建一个方法来创建一个较小的子矩阵(仍然是 Matrix 类型),复制值,并按值返回。

class Matrix {
public:
Matrix createSubMatrix(size_t ri, size_t ci, size_t rsz, size_t csz);
};

那么您的加法、赋值等操作就不会在尝试转换其他类型时承担额外的开销。

您将支付 Matrix 拷贝的开销,但在您生活的这个阶段我不会强调这一点。 :)

关于C++,重新定义运算符=,给矩阵赋一个子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13183157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com