社区讨论

有c++语法大神能教我operator吗

学术版参与者 5已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@lo26h6lu
此快照首次捕获于
2023/10/23 08:47
2 年前
此快照最后确认于
2023/11/03 09:02
2 年前
查看原帖
想写一个矩阵的结构体并且重载运算,但是报错了,他不支持33和32的矩阵做乘法。
CPP
//
// 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;
}

回复

8 条回复,欢迎继续交流。

正在加载回复...