Загрузка данных
#include <iostream>
#include <vector>
template <typename T>
class Matrix {
public:
size_t n = 0;
size_t m = 0;
std::vector<std::vector<T>> mat;
Matrix(const std::vector<std::vector<T>> &_mat) {
mat = _mat;
n = mat.size();
m = mat[0].size();
}
std::pair<size_t, size_t> size() const {
return std::make_pair(n, m);
}
Matrix<T> operator+=(const Matrix<T> &A) {
for (size_t i = 0; i < n; i++) {
for (size_t j = 0; j < m; j++) {
mat[i][j] += A.mat[i][j];
}
}
return *this;
}
Matrix<T> operator+(const Matrix<T> &A) const {
std::vector<std::vector<T>> B_mat(n, std::vector<T>(m));
Matrix<T> B = Matrix(B_mat);
for (size_t i = 0; i < n; i++) {
for (size_t j = 0; j < m; j++) {
B.mat[i][j] = A.mat[i][j] + mat[i][j];
}
}
return B;
}
template <typename TT>
Matrix<T> operator*=(TT x) {
for (size_t i = 0; i < n; i++) {
for (size_t j = 0; j < m; j++) {
mat[i][j] *= x;
}
}
return *this;
}
template <typename TT>
Matrix<T> operator*(TT x) const {
std::vector<std::vector<T>> B_mat(n, std::vector<T>(m));
Matrix<T> B = Matrix(B_mat);
for (size_t i = 0; i < n; i++) {
for (size_t j = 0; j < m; j++) {
B.mat[i][j] = mat[i][j] * x;
}
}
return B;
}
Matrix<T> transpose() {
std::vector<std::vector<T>> new_mat(m, std::vector<T>(n));
for (size_t i = 0; i < m; i++) {
for (size_t j = 0; j < n; j++) {
new_mat[i][j] = mat[j][i];
}
}
mat = new_mat;
size_t old_n = n;
n = m;
m = old_n;
return *this;
}
Matrix<T> transposed() const {
std::vector<std::vector<T>> new_mat(m, std::vector<T>(n));
for (size_t i = 0; i < m; i++) {
for (size_t j = 0; j < n; j++) {
new_mat[i][j] = mat[j][i];
}
}
return Matrix(new_mat);
}
};
template <typename T>
std::ostream& operator<<(std::ostream& out, const Matrix<T>& A) {
size_t n = A.n;
size_t m = A.m;
for (size_t i = 0; i < n; i++) {
for (size_t j = 0; j < m - 1; j++) {
out << A.mat[i][j] << "\t";
}
out << A.mat[i][m - 1];
if (i != n - 1) {
out << "\n";
}
}
return out;
}
D. Матрица - 4 ПИ С++ 23
Не решена
Ограничение времени 1.5 секунд
Ограничение памяти 64 Мб
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Внесите следующие изменения в предыдущую программу:
Добавьте перегруженную версию оператора operator *= (const Matrix& other), умножающую текущую матрицу на other. Заметьте, что оператор должен вернуть ссылку на текущую модифицированную матрицу.
Добавьте реализацию константного оператора operator * (const Matrix& other), возвращающую произведение матриц.
Можете считать, что размеры матрицы не превосходят
100
100, а значения — целые числа, не превосходящие
100
100 по модулю.
Проверьте согласованность размеров перемножаемых матриц с помощью стандартной конструкции assert (https://en.cppreference.com/w/cpp/error/assert).