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

2017-06-12  本文已影响0人  __Kila

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,这么多代码才勉强完成要求的功能,考试的时候根本来不及好嘛
}
上一篇下一篇

猜你喜欢

热点阅读