最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++利用類實現(xiàn)矩陣的數(shù)乘,乘法以及點乘

 更新時間:2022年11月17日 11:48:33   作者:cc?  
這篇文章主要為大家詳細(xì)介紹了C++如何利用類實現(xiàn)矩陣的數(shù)乘,乘法以及點乘,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下

 程序的探索經(jīng)過如下:

 ①首先考慮到后續(xù)代碼的維護(hù)及其復(fù)用性,為此考慮用類實現(xiàn)

 ②矩陣基本的類成員應(yīng)該包括矩陣的行列數(shù)以及矩陣名以及初始化、輸入輸出

 ③由于需要實現(xiàn)三種矩陣乘法運(yùn)算,為此考慮利用運(yùn)算符重載使用友元函數(shù)重載* +運(yùn)算符分別實   現(xiàn)矩陣的數(shù)乘、乘法以及點乘

源碼如下:

#include <bits/stdc++.h>
#include <iostream>
using namespace std;
typedef long long ll;
class Matrix                                          //封裝一個矩陣類便于后續(xù)使用
{
    int row;
    int col;                                       
    int** base;                                       //二維數(shù)組存放矩陣
public:
    Matrix(int r,int c)                               //構(gòu)造函數(shù)初始化
    {
        row = r;
        col = c;
        create();
    }
    //在外部則寫作:
    //Matrix::Matrix(int r, int c)
    //{
    //  row=r; col=c; create();
    //} 
    Matrix(const Matrix& e)                            //拷貝構(gòu)造函數(shù)
    {
        row = e.getrow();
        col = e.getcol();
        create();
        for(int i = 0;i<row;i++)
        {
            for(int j = 0;j<col;j++)
            {
                base[i][j] = e[i][j];
            }
        }
    }
    ~Matrix()                                          //析構(gòu)函數(shù)防止內(nèi)存泄露
    {
        destroy();
    }
    Matrix& operator=(const Matrix& e)                //重載等于號實現(xiàn)深拷貝
    {
        destroy();
        row = e.getrow();
        col = e.getcol();
        create();
        for(int i = 0;i<row;i++)
        {
            for(int j = 0;j<col;j++)
            {
                base[i][j] = e[i][j];
            }
        }
        return *this;
    }
    int* operator[](int i)const                       //重載[]以方便用"變量名[][]" 的形式讀寫矩陣內(nèi)容
    {
        return base[i];
    }
    int getrow()const                                 //對外提供矩陣信息
    {
        return row;
    }
    int getcol()const                                  //對外提供矩陣信息
    {
        return col;
    }
    friend Matrix operator*(int n,Matrix &e);        //重載 * 實現(xiàn)數(shù)乘 
    friend Matrix operator*(Matrix& e,Matrix& f);    //重載 * 實現(xiàn)矩陣乘法 
    friend Matrix operator+(Matrix& e,Matrix& f);    //重載 + 實現(xiàn)矩陣點乘 
private:
    void create()                                      //創(chuàng)建一個二維數(shù)組
    {
        base = new int*[row];
        for(int i = 0;i<row;i++)
        {
            base[i] = new int[col];
        }
    }
    void destroy()                                     //釋放一個二維數(shù)組
    {
        for(int i = 0;i<row;i++)
        {
            delete[] base[i];
        }
        delete[] base;
    }
};
ostream& operator<<(ostream& cout,const Matrix& e)     //重載<<方便輸出
{
    int r = e.getrow();
    int c = e.getcol();
    cout<<"row="<<r<<" col="<<c<<endl;
    for(int i = 0;i<r;i++)
    {
        for(int j = 0;j<c;j++)
        {
            cout<<e[i][j]<<" ";
        }
        cout<<endl;
    }
    return cout;
}
istream& operator>>(istream& cin,Matrix& e)           //重載>>方便輸入
{ 
    int r = e.getrow();
    int c = e.getcol();
    for(int i = 0;i<r;i++)
    {
        for(int j = 0;j<c;j++)
        {
            cin>>e[i][j];
        }
    }
    return cin;
}
Matrix operator*(int n,Matrix& e)              //重載 * 實現(xiàn)數(shù)乘
{
    Matrix ret(e.getrow(),e.getcol()); 
    for(int i=0;i<e.getrow();++i)
     {
         for(int j=0;j<e.getcol();++j)
         {
             ret[i][j]=n*e[i][j];
         }
     }
    return ret;      
}
Matrix operator*(Matrix& e,Matrix& f)        //重載 * 實現(xiàn)矩陣乘法 
{
    Matrix ret(e.getrow(),f.getcol());
    for(int i = 0;i<e.getrow();++i)
    {
        for(int j = 0;j<f.getcol();++j)
        {
             ret[i][j] = 0;
             for(int k = 0;k<e.getcol();++k)
             {
                ret[i][j]+= e[i][k]*f[k][j];
             }                
        }
    }
    return ret;
}
Matrix operator+(Matrix& e,Matrix& f)      //重載 + 實現(xiàn)矩陣點乘 
{
    Matrix ret(e.getrow(),e.getcol());     //矩陣 e 與矩陣 f為同形矩陣 取誰的行列數(shù)都一樣
    for(int i=0;i<e.getrow();++i)
    {
        for(int j=0;j<e.getcol();++j)
        {
            ret[i][j]=e[i][j]*f[i][j];
        }
     } 
    return ret;
}
int main()
{
    cout<<"請輸入要進(jìn)行的運(yùn)算(包括數(shù)乘、乘法以及點乘)"<<endl;
    cout<<"數(shù)乘 1  乘法 2  點乘3 "<<endl; 
    int choice;
    cin>>choice;
    switch (choice)
    {
        case 1:
            { 
             int array1[2];
             cout<<"請輸入矩陣的行數(shù)列數(shù)"<<endl;
             for (int i=0;i<2;++i)
                cin>>array1[i];
             int num;
             Matrix A(array1[0],array1[1]);
             cout<<"請輸入乘數(shù)"<<endl;
             cin>>num;
             cout<<"請給矩陣A賦值"<<endl;
             cin>>A;
             cout<<"num與A數(shù)乘\n"; 
             cout<<num*A;
            }
        break;
        case 2: 
            {
             int array2[4];
             cout<<"請輸入矩陣的行數(shù)列數(shù)"<<endl;
             for (int j=0;j<4;++j)
                cin>>array2[j];
             if(array2[1]!=array2[2])
              {
                  cout<<"第一個矩陣列數(shù)不等于第二個矩陣行數(shù)"<<"\n";
                  cout<<"請重啟動再次輸入"<<endl;
                }
                else
             {
                Matrix B(array2[0],array2[1]);
                 cout<<"請給矩陣B賦值"<<endl;
                cin>>B;
                Matrix C(array2[2],array2[3]);
                cout<<"請給矩陣C賦值"<<endl;
                cin>>C;
                cout<<"矩陣B與矩陣C乘法\n";
                cout<<B*C;
             }
            }
        break;
        case 3:
            {
             int array3[4];
              cout<<"請輸入矩陣的行數(shù)列數(shù)"<<endl;
             for (int k=0;k<4;++k)
                cin>>array3[k];
             if(array3[1]!=array3[3]||array3[0]!=array3[2])
              {
                  cout<<"兩個矩陣不同形"<<"\n";
                  cout<<"請重啟動再次輸入"<<endl;
                }
                else
             {
                Matrix D(array3[0],array3[1]);
                 cout<<"請給矩陣D賦值"<<endl;
                cin>>D;
                Matrix E(array3[2],array3[3]);
                cout<<"請給矩陣E賦值"<<endl;
                cin>>E;
                cout<<"矩陣D與矩陣E點乘\n";
                cout<<D+E;
             }
            }
    }
    return 0;
}

到此這篇關(guān)于C++利用類實現(xiàn)矩陣的數(shù)乘,乘法以及點乘的文章就介紹到這了,更多相關(guān)C++矩陣數(shù)乘 點乘內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于C++靜態(tài)數(shù)據(jù)成員的實現(xiàn)講解

    關(guān)于C++靜態(tài)數(shù)據(jù)成員的實現(xiàn)講解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++靜態(tài)數(shù)據(jù)成員的實現(xiàn)講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • c語言排序之歸并排序(遞歸和非遞歸)

    c語言排序之歸并排序(遞歸和非遞歸)

    這篇文章主要介紹了?c語言排序之歸并排序(遞歸和非遞歸),歸并就是把兩個或多個序列合并,本文主要介紹二路歸并,下文相關(guān)資料需要的小伙伴可以參考一下
    2022-04-04
  • C++關(guān)于size_t的bug解決案例

    C++關(guān)于size_t的bug解決案例

    這篇文章主要為大家介紹了C++關(guān)于size_t的bug解決案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • VC++ loadlibrary()加載三方dll失敗, 返回錯誤碼:126的解決方法

    VC++ loadlibrary()加載三方dll失敗, 返回錯誤碼:126的解決方法

    今天在編寫VC++ loadlibrary()加載三方dll是總是失敗,并且返回錯誤碼:126,這里就為大家分享一下具體的解決方法
    2021-03-03
  • C語言關(guān)鍵字union的定義和使用詳解

    C語言關(guān)鍵字union的定義和使用詳解

    這篇文章主要介紹了C語言關(guān)鍵字union的定義和使用詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • C++ 讓函數(shù)返回數(shù)組的方法

    C++ 讓函數(shù)返回數(shù)組的方法

    這篇文章主要介紹了C++ 讓函數(shù)返回數(shù)組的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C++實現(xiàn)LeetCode(170.兩數(shù)之和之三 - 數(shù)據(jù)結(jié)構(gòu)設(shè)計)

    C++實現(xiàn)LeetCode(170.兩數(shù)之和之三 - 數(shù)據(jù)結(jié)構(gòu)設(shè)計)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(170.兩數(shù)之和之三 - 數(shù)據(jù)結(jié)構(gòu)設(shè)計),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++ Primer 第一部分基本語言

    C++ Primer 第一部分基本語言

    這篇文章主要介紹了C++ Primer 第一部分基本語言的相關(guān)資料,需要的朋友可以參考下
    2014-02-02
  • C++簡明分析inline函數(shù)的使用

    C++簡明分析inline函數(shù)的使用

    inline是C++關(guān)鍵字,在函數(shù)聲明或定義中,函數(shù)返回類型前加上關(guān)鍵字inline,即可以把函數(shù)指定為內(nèi)聯(lián)函數(shù)。這樣可以解決一些頻繁調(diào)用的函數(shù)大量消耗??臻g(棧內(nèi)存)的問題
    2022-07-07
  • 用C++實現(xiàn)SLR語法分析程序

    用C++實現(xiàn)SLR語法分析程序

    大家好,本篇文章主要講的是用C++實現(xiàn)SLR語法分析程序,感興趣的同學(xué)趕緊來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02

最新評論

龙口市| 宁乡县| 商丘市| 栖霞市| 湘潭市| 高要市| 伊金霍洛旗| 连云港市| 崇仁县| 长顺县| 镇安县| 外汇| 象山县| 延吉市| 湖口县| 繁昌县| 西畴县| 元阳县| 祁东县| 江西省| 句容市| 玉树县| 盐山县| 潮州市| 进贤县| 苗栗县| 神农架林区| 湟源县| 吐鲁番市| 大英县| 安泽县| 元阳县| 呼伦贝尔市| 泊头市| 唐河县| 深州市| 楚雄市| 新巴尔虎右旗| 克东县| 伽师县| 瓮安县|