实现一个操作集合的类

c++实验课作业:实现整型集合的增、删、清空、求元素数目、输出所有元素、求交并集……

类头文件:

 

#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED
#include <string.h> //包含memset
class Set
{
public:
	int items[20];			
	int number; 
	Set() 
	{
		number = 0;
		memset(items, 0, sizeof(items)); //内存清零
	}
	
	void init(int items[], int num);
	
	bool add_item(int item);
	
	bool remove_item(int item);
	
	Set operator+ (Set set2);  //运算符重载
	
	Set operator* (Set set2);  //同上

	void display();

	int is_exist(int item);

	void clear();

	void count();
};
#endif // CLASS_H_INCLUDED


类源文件:

 

#include "stdafx.h"
#include "set.h"
#include <iostream>
using namespace std;

int Set::is_exist(int item)	//判断元素是否存在,并定位
{
	for (int i = 0; i < number; i++)
	{
		if (items[i] == item) 
			return i;
	}
	return -1;
}

bool Set::add_item(int item)
{
	if (is_exist(item) >= 0 || this->number >= 20) 
		return false;  //若集合存在该元素,或者集合已满,则退出
	items[number] = item; //否则将集合添加至集合尾部
	number++;
	return true;
}

bool Set::remove_item(int item)
{
	int pos = is_exist(item);
	if (pos == -1) 
		return false;//若集合中不含该元素,退出
	for (int i = pos; i < number - 1; i++)
		items[i] = items[i + 1];//元素前移,覆盖要删的值
	number--;
	return true;
}

Set Set::operator* (Set set2)
{
	Set result;
	for (int i = 0; i < this->number; i++)//this指向调用该函数的对象
	{
		if (set2.is_exist(this->items[i]) >= 0) //二次遍历
		{
			result.items[result.number] = this->items[i];
			result.number++;
		}
	}
	return result;
}

Set Set::operator+ (Set set2)
{
	Set result;
	for (int i = 0; i<number; i++)
	{ //将元素合并到同一,不管重复
		result.items[result.number] = this->items[i];
		result.number++;
	}
	for (int j = 0; j<number;j++)
	{
		if (result.is_exist(set2.items[j]) == -1)
		{ //将合并后的集合与原集合比较,剔除重复者
			result.items[result.number] = set2.items[j];
			result.number++;
		}
	}
	return result;
}

void Set::init(int items[], int num)
{
	for (int i = 0; i < num;i++)
	{
		this->items[i] = items[i];
	}
	number = num;
}


void Set::display()
{
	for (int i = 0; i < number;i++)
	{
		cout << items[i] << " ";
	}
	cout << endl;
}

void Set::clear()
{
	number = 0;
	memset(items, 0, sizeof(items));
}

void Set::count()
{
	cout << number<<endl;
}

 

 

主程序文件:

 


#include "stdafx.h"
#include "set.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Set set1, set2;
	int set_one[] = { 1, 23, 5, 6, 89, 54 };
	int set_two[] = { 23, 9, 6, 56, 77 };
	
	set1.init(set_one, sizeof(set_one) / sizeof(set_one[0]));
	set2.init(set_two, sizeof(set_two) / sizeof(set_two[0]));

	cout << "初始化后的值:" << endl;
	set1.display();
	set2.display();

	set1.add_item(3);
	set2.add_item(4);

	cout << "添加后的值:" << endl;
	set1.display();
	set2.display();

	set1.remove_item(23);
	set2.remove_item(77);

	cout << "删除后的值:" << endl;
	set1.display();
	set2.display();

	cout << "交集:" << endl;
	Set set3 = set1 * set2;
	set3.display();

	cout << "并集:" << endl;
	Set set4 = set1 + set2;
	set4.display();

	cout << "个数:" << endl;
	set4.count();

	cout << "清空:" << endl;
	set1.clear();
	set1.display();

	cin.get();
	return 0;
}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值