3
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;
感謝您的幫助。
矩陣的維數是否寫入變化? –
@ Tom:賦值之前和之後的A矩陣的維數不會改變... – justik
您必須創建一個Submatrix類,爲該類定義'operator =()'(重載),並使'Matrix :: operator()(int,int,int,int)'返回一個子矩陣。子矩陣只是矩陣的一個小代理,它保留了對矩陣和邊界的引用。所有操作都被轉發到主矩陣。 –