如何写一个c++写的集合类运算程序
利用C++语言设计和实现集合的并、交、差集运算,要求具备如下主要功能:(1)输入输出集合信息,集合元素类型可以是整数、实数或字符串(2)判断集合的大小\判断集合是否为空(...
利用C++语言设计和实现集合的并、交、差集运算,要求具备如下主要功能:
(1)输入输出集合信息,集合元素类型可以是整数、实数或字符串
(2)判断集合的大小\判断集合是否为空
(3)将集合置空
(4)在集合中查找指定的元素
实现集合的交、并、差等运算 展开
(1)输入输出集合信息,集合元素类型可以是整数、实数或字符串
(2)判断集合的大小\判断集合是否为空
(3)将集合置空
(4)在集合中查找指定的元素
实现集合的交、并、差等运算 展开
1个回答
展开全部
#include<iostream>
using namespace std;
//================================================================
//辅助类,用来重载第二层[]操作符
class Matrixrow
{
friend class Cmatrix; //定义友元类
public:
//构造函数
Matrixrow()
{
row=0;
col=0;
p=new int[row*col*sizeof(int)];//为指针所指向的数组分配内存
}
//构造函数
Matrixrow(int r,int c):row(r),col(c)
{
p=new int[r*c*sizeof(int)];//分配内存
}
//析构函数
~Matrixrow()
{
delete p;//释放内存
}
//重载第二层[]操作符
int & operator[](int c)
{
return p[currentrow*col+c];//返回由第二层[]根据当前行取得的值作为[][]取得的值
}
private:
int *p;//指针
int row;//行
int col;//列
int currentrow; //当前行
};
//================================================================
//矩阵运算类
class Cmatrix
{
private:
int **matrix; //二维指针指向存矩阵元素的区域
int height; //矩阵的行数
int width; //矩阵的列数
Matrixrow mr; //声明一个mr对象,以传入第一层[]获取的值作为其当前行,然后进行第二层[]元素确定
public:
//构造函数
Cmatrix()
{
height=0;
width=0;
size();//分配内存
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
matrix[i][j]=0;
}
}
}
//构造函数
Cmatrix(int h,int w): mr(h, w)
{
height=h;
width=w;
size();//分配内存
}
//拷贝构造函数
Cmatrix::Cmatrix(const Cmatrix &m1):height(m1.height),width(m1.width)
{
size();
for(int i=0;i<m1.height;i++)
{
for (int j=0;j<m1.width;j++)
{
matrix[i][j]=m1.matrix[i][j];
}
}
}
//分配内存的函数
void size()
{
//为动态二维数组分配内存
matrix=new int * [height];
for(int i = 0; i < height; i++)
{
matrix[i] = new int[width];
}
}
//初始化函数,用来输入矩阵元素
void Initialize()
{
cout<<"请输入矩阵的 "<<height<<"(行)*"<<width<<"(列) 个元素:"<<endl;
//输入元素
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
cin>>matrix[i][j];
}
}
//将输入的矩阵元素值传入mr对象
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
*(mr.p+i*width+j)=matrix[i][j];
}
}
}
//显示矩阵的函数
void display()
{
cout<<endl<<"得到的矩阵是:"<<endl<<endl;
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
//析构函数
virtual ~Cmatrix()
{
{
for (int i=0;i<height;i++)
{
if(matrix!=NULL)
{
delete[] matrix[i]; //释放为存储矩阵元素而分配的内存
}
}
}
}
//重载+操作符
friend const Cmatrix operator +(Cmatrix m1,const Cmatrix & m2)
{
//检验相加的条件
if ((m1.width==m2.width)&&(m1.height==m2.height))
{
cout<<"两个矩阵可以相加!"<<endl;
//完成矩阵相加
for(int i=0;i<m2.height;i++)
{
for(int j=0;j<m2.width;j++)
m1.matrix[i][j]+=m2.matrix[i][j];
}
}
else
{
cout<<"两个矩阵不能相加!"<<endl;
}
return m1;
}
//重载-操作符
friend const Cmatrix operator -(Cmatrix m1,const Cmatrix & m2)
{
//检验相减的条件
if ((m1.width==m2.width)&&(m1.height==m2.height))
{
cout<<"两个矩阵可以相减!"<<endl;
//完成矩阵相减
for(int i=0;i<m2.height;i++)
{
for(int j=0;j<m2.width;j++)
m1.matrix[i][j]-=m2.matrix[i][j];
}
}
else
{
cout<<"两个矩阵不能相减!"<<endl;
}
return m1;
}
//重载*操作符
friend const Cmatrix operator *(const Cmatrix &m1,const Cmatrix & m2)
{
Cmatrix mul(m1.height,m2.width);//定义一个Cmatrix对象临时存储乘积
//元素全部初始化为零
for(int m=0;m<mul.height;m++)
{
for (int n=0;n<mul.width;n++)
{
mul.matrix[m][n]=0;
}
}
//检验相乘的条件
if (m1.width==m2.height)
{
cout<<"两个矩阵可以相乘!"<<endl;
//完成矩阵元素相乘
for(int y=0;y<m1.height;y++)
{
for (int x=0;x<m2.width;x++)
{
for (int i=0;i<m1.width;i++)
{
mul.matrix[y][x]+=m1.matrix[y][i]*m2.matrix[i][x];
}
}
}
}
else
cout<<"两个矩阵不能相乘!"<<endl;
return mul;//返回乘积
}
//重载=操作符
const Cmatrix& Cmatrix::operator=(const Cmatrix &m)
{
if(matrix!=NULL)
delete[] matrix;
height = m.height;
width = m.width;
size();
for(int i=0;i<m.height;i++)
{
for (int j=0;j<m.width;j++)
{
matrix[i][j]=m.matrix[i][j];
}
}
return *this;
}
//重载第一层[]操作符
Matrixrow & operator[](int row)
{
mr.currentrow = row;//获取第一层[]取得的值作为当前行
return mr;//返回
}
};
//================================================================
int main()
{
//矩阵相乘=========================================
Cmatrix c1(2,3);//2行3列的矩阵
c1.Initialize();
c1.display();
cout<<"第一行第二列是: "<<c1[0][1]<<endl;
Cmatrix c2(3,2);//3行2列的矩阵
c2.Initialize();
c2.display();
Cmatrix c3;
c3=c1*c2;//矩阵相乘
c3.display();
//矩阵相加==========================================
Cmatrix c4(2,2),c5(2,2),c6;
c4.Initialize();
c4.display();
c5.Initialize();
c5.display();
c6=c4+c5;
c6.display();
//矩阵相减=========================================
c4.Initialize();
c4.display();
c5.Initialize();
c5.display();
c6=c4-c5;
c6.display();
return 0;
}
using namespace std;
//================================================================
//辅助类,用来重载第二层[]操作符
class Matrixrow
{
friend class Cmatrix; //定义友元类
public:
//构造函数
Matrixrow()
{
row=0;
col=0;
p=new int[row*col*sizeof(int)];//为指针所指向的数组分配内存
}
//构造函数
Matrixrow(int r,int c):row(r),col(c)
{
p=new int[r*c*sizeof(int)];//分配内存
}
//析构函数
~Matrixrow()
{
delete p;//释放内存
}
//重载第二层[]操作符
int & operator[](int c)
{
return p[currentrow*col+c];//返回由第二层[]根据当前行取得的值作为[][]取得的值
}
private:
int *p;//指针
int row;//行
int col;//列
int currentrow; //当前行
};
//================================================================
//矩阵运算类
class Cmatrix
{
private:
int **matrix; //二维指针指向存矩阵元素的区域
int height; //矩阵的行数
int width; //矩阵的列数
Matrixrow mr; //声明一个mr对象,以传入第一层[]获取的值作为其当前行,然后进行第二层[]元素确定
public:
//构造函数
Cmatrix()
{
height=0;
width=0;
size();//分配内存
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
matrix[i][j]=0;
}
}
}
//构造函数
Cmatrix(int h,int w): mr(h, w)
{
height=h;
width=w;
size();//分配内存
}
//拷贝构造函数
Cmatrix::Cmatrix(const Cmatrix &m1):height(m1.height),width(m1.width)
{
size();
for(int i=0;i<m1.height;i++)
{
for (int j=0;j<m1.width;j++)
{
matrix[i][j]=m1.matrix[i][j];
}
}
}
//分配内存的函数
void size()
{
//为动态二维数组分配内存
matrix=new int * [height];
for(int i = 0; i < height; i++)
{
matrix[i] = new int[width];
}
}
//初始化函数,用来输入矩阵元素
void Initialize()
{
cout<<"请输入矩阵的 "<<height<<"(行)*"<<width<<"(列) 个元素:"<<endl;
//输入元素
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
cin>>matrix[i][j];
}
}
//将输入的矩阵元素值传入mr对象
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
*(mr.p+i*width+j)=matrix[i][j];
}
}
}
//显示矩阵的函数
void display()
{
cout<<endl<<"得到的矩阵是:"<<endl<<endl;
for (int i=0;i<height;i++)
{
for (int j=0;j<width;j++)
{
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
//析构函数
virtual ~Cmatrix()
{
{
for (int i=0;i<height;i++)
{
if(matrix!=NULL)
{
delete[] matrix[i]; //释放为存储矩阵元素而分配的内存
}
}
}
}
//重载+操作符
friend const Cmatrix operator +(Cmatrix m1,const Cmatrix & m2)
{
//检验相加的条件
if ((m1.width==m2.width)&&(m1.height==m2.height))
{
cout<<"两个矩阵可以相加!"<<endl;
//完成矩阵相加
for(int i=0;i<m2.height;i++)
{
for(int j=0;j<m2.width;j++)
m1.matrix[i][j]+=m2.matrix[i][j];
}
}
else
{
cout<<"两个矩阵不能相加!"<<endl;
}
return m1;
}
//重载-操作符
friend const Cmatrix operator -(Cmatrix m1,const Cmatrix & m2)
{
//检验相减的条件
if ((m1.width==m2.width)&&(m1.height==m2.height))
{
cout<<"两个矩阵可以相减!"<<endl;
//完成矩阵相减
for(int i=0;i<m2.height;i++)
{
for(int j=0;j<m2.width;j++)
m1.matrix[i][j]-=m2.matrix[i][j];
}
}
else
{
cout<<"两个矩阵不能相减!"<<endl;
}
return m1;
}
//重载*操作符
friend const Cmatrix operator *(const Cmatrix &m1,const Cmatrix & m2)
{
Cmatrix mul(m1.height,m2.width);//定义一个Cmatrix对象临时存储乘积
//元素全部初始化为零
for(int m=0;m<mul.height;m++)
{
for (int n=0;n<mul.width;n++)
{
mul.matrix[m][n]=0;
}
}
//检验相乘的条件
if (m1.width==m2.height)
{
cout<<"两个矩阵可以相乘!"<<endl;
//完成矩阵元素相乘
for(int y=0;y<m1.height;y++)
{
for (int x=0;x<m2.width;x++)
{
for (int i=0;i<m1.width;i++)
{
mul.matrix[y][x]+=m1.matrix[y][i]*m2.matrix[i][x];
}
}
}
}
else
cout<<"两个矩阵不能相乘!"<<endl;
return mul;//返回乘积
}
//重载=操作符
const Cmatrix& Cmatrix::operator=(const Cmatrix &m)
{
if(matrix!=NULL)
delete[] matrix;
height = m.height;
width = m.width;
size();
for(int i=0;i<m.height;i++)
{
for (int j=0;j<m.width;j++)
{
matrix[i][j]=m.matrix[i][j];
}
}
return *this;
}
//重载第一层[]操作符
Matrixrow & operator[](int row)
{
mr.currentrow = row;//获取第一层[]取得的值作为当前行
return mr;//返回
}
};
//================================================================
int main()
{
//矩阵相乘=========================================
Cmatrix c1(2,3);//2行3列的矩阵
c1.Initialize();
c1.display();
cout<<"第一行第二列是: "<<c1[0][1]<<endl;
Cmatrix c2(3,2);//3行2列的矩阵
c2.Initialize();
c2.display();
Cmatrix c3;
c3=c1*c2;//矩阵相乘
c3.display();
//矩阵相加==========================================
Cmatrix c4(2,2),c5(2,2),c6;
c4.Initialize();
c4.display();
c5.Initialize();
c5.display();
c6=c4+c5;
c6.display();
//矩阵相减=========================================
c4.Initialize();
c4.display();
c5.Initialize();
c5.display();
c6=c4-c5;
c6.display();
return 0;
}
追问
题目跟矩阵没什么关系吧。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询