12.定义一个集合类SET,处理整型数组。

本文介绍了一个使用C++实现的集合类SET,该类包含整型数组并重载了“==”运算符。成员函数用于判断一个数是否属于集合,友元函数用于判断两个集合是否相同。在测试部分,使用了四个集合a、b、c、d进行比较,检查它们之间的元素相同性。
摘要由CSDN通过智能技术生成

12.定义一个集合类SET,处理整型数组。通过成员函数重载运算符“==”,判断一个数是否属于集合;通
过友元重载运算符“==”,判断两个集合是否相同,即集合中的所有元素相同,但顺序可不同。具体要求如下:
(1)私有数据成员:
int *a; //数据成员,存放整型数组,集合为数组中的所有元素 
int len; //数据成员,数组的长度 
(2)公有成员函数:
SET(int*p,intn):构造函数,以形参初始化数据成员;
int operator==(intm):重载函数,判断m是否属于当前对象所属的集合;
friend int operator==(SET&s1.SET&s2):重载函数,判断s1和s2所属的集合是否相同,可在该函数中调用类的其他函数;
void print():输出集合;
~SETO:析构函数,释放动态内存。
(3)对所定义的类进行测试。以集合a{1,2,3,4,5}、集合b{1,2,3,4,5}、集合c{1,2,3,4,5,6}、集合d{1,3,5,7,9}
为测试数据,判断a与b、a与c、a与d之间是否相同。

#include<iostream>
using namespace std;
class SET
{
private:
	int* a;
	int len;
public:
	SET(int* p, int len)
	{
		this->len = len;
		a = new int[len];
		for (int i = 0; i < len; i++)
		{
			a[i] = p[i];
		}
	}
	~SET(){delete[]a;}
	int operator==(int num)
	{
		for (int i = 0; i < this->len; i++)
		{
			if (a[i] == num)
				return 1;
		}
		return 0;
	}
	friend int operator==(SET& s1, SET& s2)
	{
		if (s1.len != s2.len)
			return 0;
		for (int i = 0; i < s1.len; i++)
		{
			if (!(s2 == s1.a[i]))
				return 0;
		}
		return 1;
	}
		void print()
		{
			for (int i = 0; i < len; i++)
			cout << a[i] << " ";
			cout << endl;
		}
};
int main()
{
	int arr1[5] = { 1,2,3,4,5 }; int arr2[5] = { 1,2,3,4,5 };
	int arr3[6] = { 1,2,3,4,5,6 };int arr4[5] = { 1,3,5,7,9 };
	SET a(arr1, 5), b(arr2, 5), c(arr3, 6), d(arr4, 5);
	int num; cin >> num;
	if (d == num)
		cout << num << "在子集d内" << endl;
	else
		cout << num << "不在子集d内" << endl;
	cout << "--------";
	if (a == b)
	{
		cout << "子集相同" << endl; cout << "a的子集:";  a.print(); cout << "b的子集:";  b.print();
	}
	else
	{
		cout << "子集不同" << endl; cout << "a的子集:";  a.print(); cout << "b的子集:";  b.print();
	}
	cout << "--------";
	if(b==d)
	{
		cout << "子集相同" << endl; cout << "b的子集:"; b.print(); cout << "d的子集:"; d.print();
	}
	else
	{
		cout << "子集不同" << endl; cout << "b的子集:"; b.print(); cout << "d的子集:"; d.print();
	}
	system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值