程序翻译
发布网友
发布时间:2022-04-30 05:32
我来回答
共1个回答
热心网友
时间:2023-10-17 08:34
#include<iostream> //引用输入输出流
#include<vector> //引用标准向量运算库
#include<algorithm> //引用标准算法库
using namespace std;
//定义CSet类-----------------------------------------------------------------------------
class CSet;
ostream& operator <<(ostream& os,CSet& Set);
class CSet
{
private:
vector<int> Set;
public:
CSet(){}
CSet(int *nset,int n);
CSet(CSet& nSet)
~CSet(){}
CSet Union(CSet sSet);
CSet Join(CSet sSet);
friend ostream& operator <<(ostream& os,CSet& Set);
};
//CSet类构造函数,用长度为n的int数组nset来初始化CSet类,并对其元素进行排序
CSet::CSet(int *nset, int n)
{
Set.resize(n); //重设元素个数
for(int i=0;i<n;i++)
Set[i]=nset[i]; //复制元素
sort(Set.begin(),Set.end()); //元素重排
}
//求两个CSet类的并集,即相同的元素只出现一次
CSet CSet::Union(CSet tSet)
{
CSet Union(*this);
vector<int>::iterator iter=Union.Set.begin();
for(unsigned i=0;i<tSet.Set.size();)
{
if(iter==Union.Set.end())
{
Union.Set.push_back(tSet.Set[i]);
iter=Union.Set.end();
i++;continue;
}
if(tSet.Set[i]>*iter) iter++;
else if(tSet.Set[i]==*iter)
else
}
return Union;
}
//求两个CSet类的交集,即只出现相同的元素
CSet CSet::Join(CSet tSet)
{
CSet Join;
for(unsigned i=0,j=0;i<Set.size()&&j<tSet.Set.size();)
{
if(Set[i]>tSet.Set[j]) j++;
else if(Set[i]<tSet.Set[j]) i++;
else
{
Join.Set.push_back(Set[i]);
i++;j++;
}
}
return Join;
}
//输出CSet的元素,支持流操作的输出
ostream& operator <<(ostream& os,CSet& Set)
{
os<<"{ "; //前面加括号
for(unsigned i=0;i<Set.Set.size();i++)
{
if(i) os<<", ";
os<<Set.Set[i]; //输出每个元素,用逗号隔开
}
os<<"}"<<endl; //后面加括号回车
return os;
}
//--------------------------------------------------------------------------------------
void main()
{
int X[]=,Y[]=;
//CSet就是集合
CSet A(X,6),B(Y,7); //此时A=,B=
CSet C,D(C); //此时D=C=空集
C=A.Union(B); //C=,即A=
D=A.Join(B); //C=,即B=
cout<<A<<B<<C<<D;
system("pause");
}