定义整数集合类intSet.该类包括以下成员函数:
inSet(); //类的构造函数,根据需要可以定义多个构造函数
int Empty(); //清空该整数集合
bool Isempty(); //判断整数集合是否为空
bool Ismemberof(); //判断某个整数是否在该整数集合内
int Add(); //增加一个整数到整数集合
int Sub(); // 从整数集合中删除一个整数元素
int Isequal(); // 判断2个集合是否相等
int Intersection(); //求2个整数集合的交集
int Merge(); //求2个整数集合的并集
void Print(); //依次打印该整数集合
该类还包括一下数据成员:
int element[100] 保存整数集合数据
int Endposition 指示集合的最后一个元素位置
注意:整数集合中不允许有相同的元素存在.另外,对于函数的参数及其返回值类型,根据需要自定义
找到一个网友的,一会留着对比:
https://zhidao.baidu.com/question/43414714.html
下面是自己的代码:
#include
using namespace std;
class intSet
{
public:
intSet()
{
cout<<"无参数构造函数"<
运行结果:
遇到的问题:
1.例如:int j=sizeof(a)/sizeof(int);
文章案例https://blog.csdn.net/cai649399010/article/details/84170308
除了char型数组可以用strlen求出它的实际存储个数,整型数组是不可以用sizeof的除非他装满了。
2.一开始没有看到题目中私有成员中有了数组的位置,想着自己可以求出来,结果花费了很多时间,也不可以。用了下标之后就很清晰了。
3.注意一些细节,集合中不可以有重复的部分,交集和并集的求法。
4.运用私有成员下标表示数组的清空,一开始自己还想着delete啥的,网上查不可以,毕竟也不是new出来的空间。
5.上面的代码是自己写的,写的很啰嗦,应该还可以简化。
6.通过这一题大概熟悉掌握类的声明和函数的声明以及调用等语法和方法。
================写的脑袋晕乎乎的,再看下这个网友的答案
https://zhidao.baidu.com/question/43414714.html=====================================
#include
using namespace std;
enum DeleteType{theElement,theIndex};
class IntEet
{
public:
IntEet();// 构造函数,根据需要可重载
IntEet(int e);
IntEet(IntEet *const is);
IntEet(int ia[],int );
void Clear(); //清空集合
bool IsEmpty(); //判断集合是否为空
bool IsMember(int m); //判断某个整数是否在集合中
bool Add(int m); //增加一个
bool Delete(int a,DeleteType dt); //删除一个
bool Delete();
bool IsEqual(IntEet &is); //判断两个集合是否相等
IntEet * Intersection(IntEet &is); //两个集合的交集
IntEet * Merge(IntEet &is); //两个集合的并集
inline void Print(); //打印集合
inline int Size(); //集合的大小
private:
int element[100];
int EndPosition;
};
IntEet::IntEet():EndPosition(-1){}
IntEet::IntEet(int e):EndPosition(e-1){}
IntEet::IntEet(IntEet *const is)
{
this->EndPosition=is->EndPosition;
for(int i=0;i<=this->EndPosition;i++)
{
this->element[i]=is->element[i];
}
}
IntEet::IntEet(int ia[],int s):EndPosition(s-1)
{
for(int i=0;iEndPosition=-1;}
bool IntEet::IsEmpty()
{
if(this->EndPosition>=0) return false;
return true;
}
bool IntEet::IsMember(int m)
{
if(IsEmpty()) return false;
for(int i=0;i<=EndPosition;i++)
{
if(m==element[i])
return true;
}
return false;
}
bool IntEet::Add(int m)
{
if(EndPosition==99) return false;
element[++this->EndPosition]=m;
return true;
}
bool IntEet::Delete()
{
if(IsEmpty())
return false;
EndPosition--;
return true;
}
bool IntEet::Delete(int a,DeleteType dt=DeleteType::theIndex)
{
if(dt==DeleteType::theIndex)
{
if(0<=a&&a<=EndPosition)
{
for(;aSize()!=is.Size())
return false;
for(int i=0;iEndPosition;i++)
{
if(this->element[i]!=is.element[i])
return false;
}
return true;
}
IntEet * IntEet::Intersection(IntEet &is)
{
inSet * ris=new IntEet(this);
if(is.IsEmpty())
return ris;
for(int i=0;i<=is.EndPosition;i++)
{
if(!ris->IsMember(is.element[i]))
if(!ris->Add(is.element[i]))
{
cout<<"容器已满,无法添加元素";
return ris;
}
}
return ris;
}
IntEet * IntEet::Merge(IntEet &is)
{
IntEet *ris=new IntEet();
if(is.IsEmpty())
return ris;
if(this->IsEmpty())
return ris;
for(int i=0;i<=this->EndPosition;i++)
if(is.IsMember(this->element[i]))
ris->Add(this->element[i]);
return ris;
}
void IntEet::Print()
{
if(this->IsEmpty())
cout<<"这个IntEet是空的"<Size()<<"个元素:";
for(int i=0,j=0;i<=this->EndPosition;i++,j++)
{
if(j%5==0) cout<element[i]<<"\t";
}
cout<EndPosition+1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int ia[]={0,1,2,3,4,4,6,7,8,9};
int iar[]={5,6,7,8,9,10,11,12,13,14};
IntEet is(ia,10);
is.Print();
IntEet ist(iar,10);
if(is.IsMember(3))
cout<<"3是is的元素"<Print();
cout<Print();
return 1;
}
粘贴编译了下有一些错,我不太会改,枚举类型啥的,不懂这个语法,我先去看后面的了,等看完再回来看看能不能调试好网友的代码