美文网首页
2017杭电C++考试最后一题代码(自做,非标准答案)

2017杭电C++考试最后一题代码(自做,非标准答案)

作者: __Kila | 来源:发表于2017-06-12 22:12 被阅读0次

    CNM,C++

    辣鸡语言,毁我青春,拉我绩点

    本题可以用2种方法new二维数组
    然而我考试的时候完全写错了
    刚考完的时候因为时间不够没来得及写完代码感到超级懊恼
    第一感觉是这题上课讲过类似的
    如果上课讲过new二维数组的话,基本就没难度了,就是写起来比较麻烦而已
    我忘了老师有没有讲过怎么new二维数组,印象里好像没有
    不过我这种上课不听的学渣的印象也不准就是了……
    后来想想,大佬们不仅厉害在会写难的代码,他们写简单的代码也比一般人要快啊
    时间不够,就是能力不足
    >技不如人,甘拜下风
    代码是我自己写的,如果与标准答案有出入,或者出现了各种奇怪的BUG,本人概不负责
    *代码可直接拷贝运行

    #include<iostream>
    #include<assert.h>
    
    using namespace std;
    
    class Matrix
    {
    public:
        Matrix()
        {
            row=0;
            col=0;
            p=NULL;
        }
        Matrix(int h,int l)//构造函数
        {
            row=h;
            col=l;
            //p=new int[row][col];错误的写法
            p=new int*[row];//该写法内存不连续
            for(int i=0;i<row;i++)
                p[i]=new int[col];
            set();
        };
        /*Matrix(Matrix &c)//复制构造函数,可不写,不影响题中要求的功能实现
        {
            row=c.row;
            col=c.col;
            p=new int*[row];
            for(int i=0;i<row;i++)
                p[i]=new int[col];
            for(int i=0;i<row;i++)
                for(int j=0;j<col;j++)
                    p[i][j]=c.p[i][j];
        };*/
        ~Matrix()//析构函数
        {
            for(int i=0;i<row;i++)//由于内存不连续,需要分别释放
                delete []p[i];
            delete []p;
        };
        void set()
        {
            for(int i=0;i<row;i++)
                for(int j=0;j<col;j++)
                    cin>>p[i][j];
        };
        void show();
        Matrix& operator=(const Matrix &m);
        friend Matrix operator+(const Matrix &m,const Matrix &n);
        friend Matrix operator-(const Matrix &m,const Matrix &n);
    private:
        int row;//行
        int col;//列
        //int* p;错误的写法
        int** p;
    };
    void Matrix::show()
    {
        for(int i=0;i<row;i++)
        {
            for(int j=0;j<col;j++)
                cout<<p[i][j]<<' ';
            cout<<endl;
        }
    }
    Matrix& Matrix::operator=(const Matrix &m)
    {
        if(this==&m)
            return *this;
        for(int i=0;i<row;i++)
                delete []p[i];
        delete []p;
        row=m.row;
        col=m.col;
        p=new int*[row];
        for(int i=0;i<row;i++)
            p[i]=new int[col];
        for(int i=0;i<row;i++)
            for(int j=0;j<col;j++)
                p[i][j]=m.p[i][j];
        return *this;
    }
    Matrix operator+(const Matrix &m,const Matrix &n)
    {
        assert(m.row==n.row&&m.col==n.col);
        Matrix a;
        a.row=m.row;
        a.col=m.col;
        a.p=new int*[a.row];
        for(int i=0;i<a.row;i++)
            a.p[i]=new int[a.col];
        for(int i=0;i<a.row;i++)
            for(int j=0;j<a.col;j++)
                a.p[i][j]=m.p[i][j]+n.p[i][j];
        return a;
    }
    Matrix operator-(const Matrix &m,const Matrix &n)
    {
        assert(m.row==n.row&&m.col==n.col);
        Matrix a;
        a.row=m.row;
        a.col=m.col;
        a.p=new int*[a.row];
        for(int i=0;i<a.row;i++)
            a.p[i]=new int[a.col];
        for(int i=0;i<a.row;i++)
            for(int j=0;j<a.col;j++)
                a.p[i][j]=m.p[i][j]-n.p[i][j];
        return a;
    }
    int main()
    {
        Matrix a(2,2);//为方便测试,采用2*2的矩阵
        Matrix b(2,2);
        Matrix c;
        Matrix d;
        c=a+b;
        c.show();
        d=a-b;
        d.show();
        return 0;
        //CNM,这么多代码才勉强完成要求的功能,考试的时候根本来不及好嘛
    }
    
    #include<iostream>
    #include<assert.h>
    
    using namespace std;
    
    class Matrix
    {
    public:
        Matrix()
        {
            row=0;
            col=0;
            p=NULL;
        }
        Matrix(int h,int l)//构造函数
        {
            row=h;
            col=l;
            p=new int[row*col];//该写法内存连续
            set();
        };
        /*Matrix(Matrix &c)//复制构造函数,可不写,不影响题中要求的功能实现
        {
            row=c.row;
            col=c.col;
            p=new int[row*col];
            for(int i=0;i<row;i++)
                for(int j=0;j<col;j++)
                    p[i*col+j]=c.p[i*col+j];
        };*/
        ~Matrix()//析构函数
        {
            delete []p;
        };
        void set()
        {
            for(int i=0;i<row;i++)
                for(int j=0;j<col;j++)
                    cin>>p[i*col+j];
        };
        void show();
        Matrix& operator=(const Matrix &m);
        friend Matrix operator+(const Matrix &m,const Matrix &n);
        friend Matrix operator-(const Matrix &m,const Matrix &n);
    private:
        int row;//行
        int col;//列
        int* p;//注意这里的不同
    };
    void Matrix::show()
    {
        for(int i=0;i<row;i++)
        {
            for(int j=0;j<col;j++)
                cout<<p[i*col+j]<<' ';
            cout<<endl;
        }
    }
    Matrix& Matrix::operator=(const Matrix &m)
    {
        if(this==&m)
            return *this;
        delete []p;
        row=m.row;
        col=m.col;
        p=new int[row*col];
        for(int i=0;i<row;i++)
            for(int j=0;j<col;j++)
                p[i*col+j]=m.p[i*col+j];
        return *this;
    }
    Matrix operator+(const Matrix &m,const Matrix &n)
    {
        assert(m.row==n.row&&m.col==n.col);
        Matrix a;
        a.row=m.row;
        a.col=m.col;
        a.p=new int[a.row*a.col];
        for(int i=0;i<a.row;i++)
            for(int j=0;j<a.col;j++)
                a.p[i*a.col+j]=m.p[i*a.col+j]+n.p[i*a.col+j];
        return a;
    }
    Matrix operator-(const Matrix &m,const Matrix &n)
    {
        assert(m.row==n.row&&m.col==n.col);
        Matrix a;
        a.row=m.row;
        a.col=m.col;
        a.p=new int[a.row*a.col];
        for(int i=0;i<a.row;i++)
            for(int j=0;j<a.col;j++)
                a.p[i*a.col+j]=m.p[i*a.col+j]-n.p[i*a.col+j];
        return a;
    }
    int main()
    {
        Matrix a(2,2);//为方便测试,采用2*2的矩阵
        Matrix b(2,2);
        Matrix c;
        Matrix d;
        c=a+b;
        c.show();
        d=a-b;
        d.show();
        return 0;
        //CNM,这么多代码才勉强完成要求的功能,考试的时候根本来不及好嘛
    }
    

    相关文章

      网友评论

          本文标题:2017杭电C++考试最后一题代码(自做,非标准答案)

          本文链接:https://www.haomeiwen.com/subject/xydrqxtx.html