想写一个矩阵的结构体并且重载运算,但是报错了,他不支持33和32的矩阵做乘法。
//
// Created by Mori on 2023/7/18.
//
#include <bits/stdc++.h>
using namespace std;
typedef pair <int, int> pii;
typedef long long ll;
#define rep(i, x, y) for (int i = (x); i <= (y); ++i)
#define per(i, x, y) for (int i = (x); i >= (y); --i)
int read () {
int res = 0;
bool f = false;
char temp = getchar();
for (; !isdigit(temp); temp = getchar()) f = temp == '-';
for (; isdigit(temp); temp = getchar()) res = res * 10 + temp - '0';
if (f) return -res;
return res;
}
char gc () {
char temp = getchar();
while (temp == '\n' || temp == '\r' || temp == ' ') temp = getchar();
return temp;
}
template<typename T, size_t x, size_t y>
struct Matrix {
T s[x + 1][y + 1] = {};
pair <size_t, size_t> size () {
return make_pair(x, y);
}
T *operator [] (int i) {
return s[i];
}
Matrix friend operator * (Matrix &m1, Matrix &m2) {
auto resx = m1.size().first, resy = m2.size().second;
rep (i, 1, resx) rep (j, 1, resy) res[i][j] += m1[i][j] * m2[j][i];
return res;
}
void print () {
rep (i, 1, x) {
rep (j, 1, y) cout << s[i][j] << ' ';
cout << '\n';
}
}
};
signed main () {
Matrix <int, 3, 3> m;
Matrix <int, 2, 3> m2;
rep (i, 1, 3) rep (j, 1, 3) m[i][j] = i * 3 + j;
m.print();
auto m3 = m * m2;
m3.print();
return 0;
}