C ++, переопределить оператор =, назначить матрицу подматрицу

В классе Матрица

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;

Спасибо за вашу помощь.

3

Решение

Я думаю, что самый простой Решение было бы сохранить те же типы, и просто создать метод, который создает меньшую подматрицу (по-прежнему типа Matrix), копирует значения в и возвращает их по значению.

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

Тогда ваши операции добавления, присваивания и т. Д. Не требуют дополнительных затрат при попытке перевести какой-либо другой тип.

Вы оплатите накладные расходы Matrix скопируйте, но я бы не стал подчеркивать это на данном этапе вашей жизни. 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector