`
anson_xu
  • 浏览: 502604 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

C++实例集合类

 
阅读更多

 

//

此程序通过数组来定义集合类,虽不如链表高级,
//

但是也蛮有趣味的,只是在下才疏学浅,运行时有时会出现错误
//

注意:是有时会出错,程序不稳定
//




 

#include<iostream.h> 

#define Max 10

int i=0,j=0;

class Set 

{ 

private: 

int elems[Max]; 

int pc;

public: 

Set(){pc=0;elems[0]='\0';} 

Set(Set &s); // 

对象引用作为参数 

void set();

int size(Set S);

void isfull(Set S);

void isempty(Set S);

int ismemberof(int n); 

int add(int n);

int delet(int n);

Set bingji(Set A,Set B);

Set jiaoji(Set A,Set B);

void display();

}; 

 

void Set::set()//

初始化
{

 int n,m,flag=0;

 cout<<"

数组元素的个数(N<=10)";

 cin>>n;

 cout<<"

输入数组元素:";

 for(i=0;i<n;i++)

  

{cin>>m;

   

for(j=0;j<pc;j++)

   

if(m==elems[j]) {flag=1;break;}

   

if(!flag)

   

{

    

elems[i]=m;

       

pc++;}

   

}

}

 

int Set::size(Set S)

{

 return S.pc;}

 

void Set::isempty(Set S)//

判断空
{if(!size(S)) 

 

cout<<"Empty!";

 else cout<<"Not Empty!";}

 

void Set::isfull(Set S)//

判断满
{if(size(S)==Max) 

 

cout<<"Full!";

 else cout<<"Not Full!";}

 

int Set::ismemberof(int n) //

判断是否为其元素
{ 

for(int i=0;i<pc;i++) 

if(elems[i]==n) 

return 1; 

return 0; 

} 

 

int Set::add(int n) //

增加元素
{ 

if(ismemberof(n)) 

return 1; 

else if(pc>Max) 

return 0; 

else 

{ 

elems[pc++]=n; 

return 1; 

} 

} 

 

 

int Set::delet(int n)//

删除元素
{

 if(ismemberof(n))

 {for(i=0;i<pc;i++)

 if(elems[i]==n) 

 

{pc--;

 for(j=i;j<pc;i++)

  

elems[j]=elems[j+1];

 }

 return 1;

 }

 else return 0;

 }

Set::Set(Set &p) //

复制构造函数
{ 

pc=p.pc; 

for(int i=0;i<pc;i++) 

elems[i]=p.elems[i]; 

} 

 

Set Set::bingji(Set A,Set B)

{ 

 

Set C(A);

 for(i=0;i<B.pc;i++)

   

for(j=0;j<C.pc;j++)

     

if(B.elems[i]!=C.elems[j]) C.add(B.elems[i]);

 return C;    



}

 

Set Set::jiaoji(Set A,Set B)

{

 Set C;

 for(i=0;i<B.pc;i++)

   

for(j=0;j<A.pc;j++)

     

if(B.elems[i]==A.elems[j]) C.add(B.elems[i]);

 return C;

}

 

void Set::display ()//

{

 

 

if(pc<1) cout<<"ф"<<endl;

 else

 {

  

cout<<"{";

     

for(i=0;i<pc-1;i++)

  

cout<<elems[i]<<",";

  

cout<<elems[i]<<"}";

  

cout<<endl;

  

}

}

 

int main()

{

 int n;

 Set A,B,C;

 cout<<"A";

 A.set();

 cout<<"B";

 B.set();

 cout<<"A=";

 A.display();

 cout<<"B=";

 B.display();

 cout<<"A∩B=";

 C=A.jiaoji(A,B);

 C.display();

 cout<<"A∪B=";

 C=A.bingji(A,B);

 C.display();

 cout<<"A

中选择要删除的元素:";

 cin>>n;

 A.delet(n);

 cout<<"A=";

 A.display();

 cout<<"B

中选择要删除的元素:";

 cin>>n;

 B.delet(n);

 cout<<"B=";

 B.display();

 cout<<"

输入要增加到集合A

中的元素:";

 cin>>n;

 if(!A.add(n)) cout<<"

增加失败,

集合A

已满!";

 else

   

{cout<<"A=";

    

A.display();

   

}

 cout<<"

输入要增加到集合B

中的元素:";

 cin>>n;

 if(!B.add(n)) cout<<"

增加失败,

集合B

已满!";

 else

   

{cout<<"B=";

    

B.display();

    

}  



 

return 0;

 }

 

 

新写法

// 看看符合你要求不?

#include <iostream>

using namespace std;

 

const int Max=100;

//------------------------------------------------------

class Set

{

unsigned int len;

int Elem[Max];

public:

//Constructor

Set();

Set(const Set & SetObj);

 

inline bool isFull() const;

inline bool isEmpty() const;

inline unsigned int size() const;

inline int isMemberOf(int nElem) const;// 返回位置

 

bool addElem(int nElem);

bool delElem(int nElem);

 

Set Union(const Set & SetB);

Set InSection(const Set & SetB);

 

void display() const;

void Input();

};

//------------------------------------------------------

Set::Set():len(0){}

//------------------------------------------------------

Set::Set(const Set & SetObj)

{

for (len = 0;len < SetObj.len;len++)

{

Elem[len] = SetObj.Elem[len];

}

}

//------------------------------------------------------

unsigned int Set::size() const

{

return len;

}

//------------------------------------------------------

bool Set::isEmpty() const

{

return len == 0;

}

//------------------------------------------------------

bool Set::isFull() const

{

return len == Max;

}

//------------------------------------------------------

int Set::isMemberOf(int nElem) const

{

for (int index = 0; index < len; index++)

{

if (Elem[index] == nElem) return index + 1;

}

return -1;

}

//-------------------------------------------------------

void Set::display() const

{

for (int index = 0; index < len;index++)

cout<<Elem[index]<<" ";

cout<<endl;

}

//-------------------------------------------------------

// 添加和删除元素操作

//-------------------------------------------------------

bool Set::addElem(int nElem)

{

if (isFull()) return false;

else if (isMemberOf(nElem)!= -1){}//Do nothing

else

{

Elem[len++] = nElem;

}

return true;

}

//--------------------------------------------------------

bool Set::delElem(int nElem)

{

int loc = isMemberOf(nElem);

if (isEmpty()||(loc == -1)) return false;

for (int index = loc; index < len; index++)

{

Elem[index - 1] = Elem[index];

}

len--;

return true;

}

//--------------------------------------------------------

// 求交集(InSection) 与并集(Union)

//--------------------------------------------------------

Set Set::Union(const Set & SetB)

{

// 注意: 没有考虑溢出的情况

Set SetC(SetB);

for (int index = 0;index < len;index++)

SetC.addElem(Elem[index]);

return SetC;

}

//------------------------------------------------------------

Set Set::InSection(const Set & SetB)

{

Set SetC;

for (int index = 0;index < len;index++)

{

for (int indexB = 0;indexB < SetB.len;indexB++)

{

if (Elem[index] == SetB.Elem[indexB])

SetC.addElem(Elem[index]);

}

}

return SetC;

}

//--------------------------------------------------------------

void Set::Input()

{

int nSize;

cout<<" 请输入集合的大小:\n";

cin>>nSize;

if (nSize > Max) return;

cout<<" 请输入集合元素!\n";

for (int i = 0,elem; i < nSize ;i++)

{

cin>>elem;

addElem(elem);

}

}

//---------------------------------------------------------------

 

int main()

{

int n;

Set A,B,C;

cout<<"A";

A.Input();

cout<<"B";

B.Input();

cout<<"A=";

A.display();

cout<<"B=";

B.display();

cout<<"A∩B=";

C=A.InSection(B);

C.display();

cout<<"A∪B=";

C=A.Union(B);

C.display();

cout<<" A 中选择要删除的元素:";

cin>>n;

A.delElem(n);

cout<<"A=";

A.display();

cout<<" B 中选择要删除的元素:";

cin>>n;

B.delElem(n);

cout<<"B=";

B.display();

cout<<" 输入要增加到集合A 中的元素:";

cin>>n;

if (!A.addElem(n)) cout<<" 增加失败, 集合A 已满!";

else

{

cout<<"A=";

A.display();

}

cout<<" 输入要增加到集合B 中的元素:";

cin>>n;

if (!B.addElem(n)) cout<<" 增加失败, 集合B 已满!";

else

{

cout<<"B=";

B.display();

}

return 0;

}

 

 

 

  • 大小: 16.2 KB
分享到:
评论

相关推荐

    Visual C++ MFC扩展编程实例.PDF

    1.11.6 数据集合类 17 1.11.7 通信类 18 1.12 类的消息机制 18 1.12.1 MFC如何接收一个寄送消息 18 1.12.2 MFC如何处理接收的消息 18 1.12.3 UI对象 20 1.13 小 结 20 第2章 控制条 21 2.1 通用控制条 21 2.2 用API...

    VISUAL C++MFC扩展编程实例

    1.11.6 数据集合类 17 1.11.7 通信类 18 1.12 类的消息机制 18 1.12.1 MFC如何接收一个寄送消息 18 1.12.2 MFC如何处理接收的消息 18 1.12.3 UI对象 20 1.13 小 结 20 第2章 控制条 21 2.1 通用控制条 21 2.2 用API...

    Visual C++开发GIS系统:开发实例剖析

    本书是GIS系统开发技术和Visual C++编程技术的集合体,全面介绍和分析了MFC程序的框架结构和各种MFC辅助工具的使用方法,实例剖析了MFC中与图形和数据库应用程序设计有关的类。介绍了GIS系统的开发方法和思路,结合...

    Visual C++开发GIS系统:开发实例剖析

    本书是GIS系统开发技术和Visual C++编程技术的集合体,全面介绍和分析了MFC程序的框架结构和各种MFC辅助工具的使用方法,实例剖析了MFC中与图形和数据库应用程序设计有关的类。介绍了GIS系统的开发方法和思路,结合...

    Visual C++开发GIS系统:开发实例剖析2

    本书是GIS系统开发技术和Visual C++编程技术的集合体,全面介绍和分析了MFC程序的框架结构和各种MFC辅助工具的使用方法,实例剖析了MFC中与图形和数据库应用程序设计有关的类。介绍了GIS系统的开发方法和思路,结合...

    Visual_C++精彩实例详解

    CADODatabase类包含关于_ConnectionPtr的函数集合。 // 打开一个数据库连接 BOOL CADODatabase::Open ( LPCTSTR lpstrConnection = _T("");//连接字符串 ) 示例: // 访问SQL Server示例 CADODatabase pAdoDb; ...

    VISUAL C++MFC扩展编程实例(想学MFC的朋友一定不要错过)

    1.11.6 数据集合类 17 1.11.7 通信类 18 1.12 类的消息机制 18 1.12.1 MFC如何接收一个寄送消息 18 1.12.2 MFC如何处理接收的消息 18 1.12.3 UI对象 20 1.13 小 结 20 第2章 控制条 21 2.1 通用控制条 21 2.2 用API...

    C++编程思想 例子和叙述讲解C++编程

    6.10 输入输出流实例 111 6.10.1 代码生成 111 6.10.2 一个简单的数据记录 117 6.11 小结 123 6.12 练习 123 第7章 常量 124 7.1 值替代 124 7.1.1 头文件里的const 124 7.1.2 const的安全性 125 7.1.3 集合 126 ...

    面向对象与C++试题.doc

    19、模板的使用实际上是将类模板实例化成一个( )。 A.函数 B.对象 C.类 D.抽象类 20、假定MyClass为一个类,则该类的拷贝构造函数的声明语句为( )。 A.MyClass(MyClass x) B.MyClass&(MyClass x) C....

    Visual C++开发GIS系统-开发实例剖析

    本书是GIS开发技术和Visual C++编程技术的集合体。全面介绍和分析了MFC程序的框架结构和各种MFC辅助工具的使用方法,实例剖析了MFC中与图形和数据库应用程序设计有关的类。介绍了GIS的开发方法和思路,结合具体代码...

    vc++ 开发实例源码包

    如题,此实例非常适合学习,重载并自绘了Wnd类,效果是上下文字、图片、文字由大到小和星星闪烁等滚动效果。实例使用了加载类似xml文件读取信息,然后显示。 COM_ATL_Tutorial 简单的atl控件演示 COM接口挂钩及其...

    Visual_C++精彩实例详解.part2.rar

    CADODatabase类包含关于_ConnectionPtr的函数集合。 // 打开一个数据库连接 BOOL CADODatabase::Open ( LPCTSTR lpstrConnection = _T("");//连接字符串 ) 示例: // 访问SQL Server示例 CADODatabase pAdoDb; ...

    Visual_C++精彩实例详解.part4.rar

    CADODatabase类包含关于_ConnectionPtr的函数集合。 // 打开一个数据库连接 BOOL CADODatabase::Open ( LPCTSTR lpstrConnection = _T("");//连接字符串 ) 示例: // 访问SQL Server示例 CADODatabase pAdoDb; ...

    Visual_C++精彩实例详解.part5.rar

    CADODatabase类包含关于_ConnectionPtr的函数集合。 // 打开一个数据库连接 BOOL CADODatabase::Open ( LPCTSTR lpstrConnection = _T("");//连接字符串 ) 示例: // 访问SQL Server示例 CADODatabase pAdoDb; ...

    Visual_C++精彩实例详解.part3.rar

    CADODatabase类包含关于_ConnectionPtr的函数集合。 // 打开一个数据库连接 BOOL CADODatabase::Open ( LPCTSTR lpstrConnection = _T("");//连接字符串 ) 示例: // 访问SQL Server示例 CADODatabase pAdoDb; ...

    VISUAL C MFC扩展编程实例与源码

    1.11.6 数据集合类 17 1.11.7 通信类 18 1.12 类的消息机制 18 1.12.1 MFC如何接收一个寄送消息 18 1.12.2 MFC如何处理接收的消息 18 1.12.3 UI对象 20 1.13 小 结 20 第2章 控制条 21 2.1 通用控制条 21 ...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    15.1.2 类型安全的集合类 15.1.3 对象集合 15.1.4 类型化指针集合 15.2 使用CList模板类 15.2.1 绘制曲线 15.2.2 定义CCurve类 15.2.3 实现CCurve类 15.2.4 练习使用CCurve类 15.3 创建文档 15.4 改进视图 15.4.1 ...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    15.1.2 类型安全的集合类 15.1.3 对象集合 15.1.4 类型化指针集合 15.2 使用CList模板类 15.2.1 绘制曲线 15.2.2 定义CCurve类 15.2.3 实现CCurve类 15.2.4 练习使用CCurve类 15.3 创建文档 15.4 改进视图 15.4.1 ...

    C++编程思想 编程

    6.10 输入输出流实例 111 6.10.1 代码生成 111 6.10.2 一个简单的数据记录 117 6.11 小结 123 6.12 练习 123 第7章 常量 124 7.1 值替代 124 7.1.1 头文件里的const 124 7.1.2 const的安全性 125 7.1.3 集合 126 ...

    C++编程思想.pdf

    6.10 输入输出流实例 111 6.10.1 代码生成 111 6.10.2 一个简单的数据记录 117 6.11 小结 123 6.12 练习 123 第7章 常量 124 7.1 值替代 124 7.1.1 头文件里的const 124 7.1.2 const的安全性 125 7.1.3 ...

Global site tag (gtag.js) - Google Analytics