0
点赞
收藏
分享

微信扫一扫

矩阵类Matrix.h C++实现

小磊z 2022-04-13 阅读 35
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mx = 2;
struct Matrix {
    ll v[5][5];
    void init() {
        for(ll i = 0; i < 5; i++)
            for(ll j = 0 ; j < 5; j++)
                v[i][j] = 0; //初始化矩阵
    }
};
void read(Matrix &a) {
    for(ll i = 1; i <= mx; i++)
        for(ll j = 1; j <= mx; j++)
            cin >> a.v[i][j];
}
void print(Matrix a, ll mx) {
    for(ll i = 1; i <= mx; i++) {
        for(ll j = 1; j <= mx; j++)
            cin >> a.v[i][j];
        cout << '\n';
    }
}
Matrix add(Matrix a, Matrix b, ll mx) { //矩阵加法
    Matrix ans; ans.init();
    for(ll i = 1; i <= mx; i++)
        for(ll j = 1; j <= mx; j++)
            ans.v[i][j] = a.v[i][j] + b.v[i][j];
    return ans;
}
Matrix mul(Matrix a, Matrix b, ll mx) { //矩阵乘法
    Matrix ans; ans.init();
    for(ll i = 1; i <= mx; i++) {
        for(ll j = 1; j <= mx; j++) {
            ll s = 0;
            for(ll k = 1; k <= mx; k++) s += a.v[i][k] * b.v[k][j];
            ans.v[i][j] = s;
        }
    }
    return ans;
}
Matrix operator + (Matrix a, Matrix b) { //重载加法——两个矩阵相加
    Matrix ans; ans.init();
    for(ll i = 1; i <= mx; i++)
        for(ll j = 1; j <= mx; j++)
            ans.v[i][j] = a.v[i][j] + b.v[i][j];
    return ans;
}
Matrix operator + (Matrix a, ll x) { //重载加法——矩阵加数
    Matrix ans; ans.init();
    for(ll i = 1; i <= mx; i++)
        for(ll j = 1; j <= mx; j++)
            ans.v[i][j] = a.v[i][j] + x;
    return ans;
}
Matrix operator * (Matrix a, Matrix b) { //矩阵乘法
    Matrix ans; ans.init();
    for(ll i = 1; i <= mx; i++) {
        for(ll j = 1; j <= mx; j++) {
            ll s = 0;
            for(ll k = 1; k <= mx; k++) s += a.v[i][k] * b.v[k][j];
            ans.v[i][j] = s;
        }
    }
    return ans;
}
istream& operator >> (istream &is, Matrix &a) { //重载读入
    for(ll i = 1; i <= mx; i++)
        for(ll j = 1; j <= mx; j++)
            is >> a.v[i][j];
    return is;
}
ostream& operator << (ostream &os, Matrix a) { //重载输出
    for(ll i = 1; i <= mx; i++) {
        for(ll j = 1; j <= mx; j++)
            os << a.v[i][j] << " ";
        os << '\n';
    }
    return os;
}
Matrix& operator += (Matrix &a, Matrix b) {
    a = a + b;
    return a;
}
Matrix mpow(Matrix m, ll n) { //矩阵快速幂
    Matrix ans; ans.init();
    for(ll i = 1; i <= 2; i++) ans.v[i][i] = 1; //初始化单位矩阵
    do {
        if(n & 1) ans = ans * m;
        m = m * m; n >>= 1;
    } while(n); //二进制快速幂
    return ans;
}
举报

相关推荐

0 条评论