CNM,C++
辣雞語言护奈,毀我青春丙者,拉我績點
本題可以用2種方法new二維數(shù)組
然而我考試的時候完全寫錯了
剛考完的時候因為時間不夠沒來得及寫完代碼感到超級懊惱
第一感覺是這題上課講過類似的
如果上課講過new二維數(shù)組的話,基本就沒難度了悬秉,就是寫起來比較麻煩而已
我忘了老師有沒有講過怎么new二維數(shù)組澄步,印象里好像沒有
不過我這種上課不聽的學(xué)渣的印象也不準(zhǔn)就是了……
后來想想,大佬們不僅厲害在會寫難的代碼和泌,他們寫簡單的代碼也比一般人要快啊
時間不夠村缸,就是能力不足
>技不如人,甘拜下風(fēng)
代碼是我自己寫的武氓,如果與標(biāo)準(zhǔn)答案有出入梯皿,或者出現(xiàn)了各種奇怪的BUG仇箱,本人概不負(fù)責(zé)
*代碼可直接拷貝運(yùn)行
#include<iostream>
#include<assert.h>
using namespace std;
class Matrix
{
public:
Matrix()
{
row=0;
col=0;
p=NULL;
}
Matrix(int h,int l)//構(gòu)造函數(shù)
{
row=h;
col=l;
//p=new int[row][col];錯誤的寫法
p=new int*[row];//該寫法內(nèi)存不連續(xù)
for(int i=0;i<row;i++)
p[i]=new int[col];
set();
};
/*Matrix(Matrix &c)//復(fù)制構(gòu)造函數(shù),可不寫索烹,不影響題中要求的功能實現(xiàn)
{
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()//析構(gòu)函數(shù)
{
for(int i=0;i<row;i++)//由于內(nèi)存不連續(xù)工碾,需要分別釋放
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百姓,這么多代碼才勉強(qiáng)完成要求的功能渊额,考試的時候根本來不及好嘛
}
#include<iostream>
#include<assert.h>
using namespace std;
class Matrix
{
public:
Matrix()
{
row=0;
col=0;
p=NULL;
}
Matrix(int h,int l)//構(gòu)造函數(shù)
{
row=h;
col=l;
p=new int[row*col];//該寫法內(nèi)存連續(xù)
set();
};
/*Matrix(Matrix &c)//復(fù)制構(gòu)造函數(shù),可不寫垒拢,不影響題中要求的功能實現(xiàn)
{
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()//析構(gòu)函數(shù)
{
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,這么多代碼才勉強(qiáng)完成要求的功能求类,考試的時候根本來不及好嘛
}