矩阵类Matrix.h C++实现

矩阵类Matrix.h C++实现,第1张

#include 
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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/584412.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-12
下一篇2022-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存