集合的模拟实现(类模板)
作者:互联网
我们可以用一个类来模拟集合及集合运算,add运算用以实现集合元素的增加,delete运算用于实现集合元素的删除,find运算用以实现集合元素的查找,但是目前集合元素类型未知,可以是int、char、double等基本数据类型,也可以是String、Time、Student等对象类型,要求采用类模板实现集合及集合运算,包括集合元素的增加、删除和查找的等基本功能。
集合模板类MySet包括数据如下:
T data[100];//用数组来存放所有的集合元素,最多不超过100个元素
int count;//表示目前集合中有多少个元素
包括成员函数如下:
构造函数若干个,集合运算函数如下:
int addSet( T elem)
int deleSet(T elem)
int findElem(T elem)
其中,addSet向集合中添加一个元素,deleSet从集合中删除一个元素,findElem判断elem是否是集合成员,三个函数分别返回元素插入位置,删除位置和存在位置。
主函数有如下数据成员 :
MySet<\int>\ intSet;(反斜杠是转义字符,使用时去掉)
MySet<\double>\ douSet;
MySet<\string>\ strSet;
分别是int类型、double类型、String的集合。
完成上述类模板和主函数,主函数根据输入的信息,建立初始的三种不同类型的空集合对象,调用成员函数分别对intSet、douSet和StrSet执行相应的操作,并输出对应的集合信息。
#include<iostream>
using namespace std;
template<class T>
class myset
{
private:
T data[100];
int count=0;
public:
void set(T elem,int len)
{
data[len] = elem;
count = len;
}
int addset(T elem)
{
if (count > 99)
{
cout << "Full Set." << endl;
}
else
{
bool flag = false;
int i;
for (i = 0;i < count;i++)
{
if (elem == data[i])
{
cout << elem << " is already exist!" << endl;
flag = true;break;
}
}
if (flag == false)
{
data[count] = elem;count++;cout << count-1 << endl;
}
}
return count;
}
int deleset(T elem)
{
int i,j=0;
bool flag = false;
for (i = 0;i < count;i++)
{
if (elem == data[i])
{
flag = true;
for (j = i;j < count-1;j++)
{
data[j] = data[j + 1];
}
count--;
flag = true;
break;
}
}
if (flag == false)
{
cout << elem << " is not exist!" << endl;
}
else
{
cout << i << endl;
}
return i;
}
int findelem(T elem)
{
int i;
bool flag = false;
for (i = 0;i < count;i++)
{
if (elem == data[i])
{
flag = true;
break;
}
}
if (flag == true)
{
cout << i << endl;
}
else
{
cout << elem << " is not exist!" << endl;
}
return i;
}
};
int main()
{
int n=0;
myset<int>intset;
myset<double>douset;
myset<string>strset;
for (;;)
{
cin >> n;
if (n == 0) { break; }
if (n == 1)
{int oper, elem = 0;
cin >> oper >> elem;
if (oper == 1)
{
intset.addset(elem);
}
if (oper == 2)
{
intset.deleset(elem);
}
if (oper == 3)
{
intset.findelem(elem);
}
}
if (n == 2)
{
double oper, elem = 0;
cin >> oper >> elem;
if (oper == 1)
{
douset.addset(elem);
}
if (oper == 2)
{
douset.deleset(elem);
}
if (oper == 3)
{
douset.findelem(elem);
}
}
if (n == 3)
{
string oper, elem;
cin >> oper >> elem;
if (oper == "1")
{
strset.addset(elem);
}
if (oper == "2")
{
strset.deleset(elem);
}
if (oper == "3")
{
strset.findelem(elem);
}
}
}
return 0;
}
标签:oper,count,int,elem,flag,模板,集合,模拟 来源: https://www.cnblogs.com/iceforever7/p/16289979.html