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