交集、并集、差集、对称差运算(集合类) C++实现

博文首先贴出交集、并集、差集、对称差运算的C++代码以及程序运行结果,然后再进行一个比较完整的构建代码思路解析,整个项目的实现功能如下:
在这里插入图片描述


1. 实现代码以及程序运行结果

代码不太理解的,看下面解析。

1.1 头文件定义 UFSets.h

//该文章的原创作者:阿伟加油鸭。首发于CSDN平台,装载请标注博文出处。
//网址:https://blog.csdn.net/qq_45877524/article/details/106972508

/**
选择题目一:
结合离散数学中集合的性质于运算,设计集合类(元素的类型自行定义),并实现集合的基本运算,
包括:
……
**/

#ifndef UFSETS_H_
#define UFSETS_H_
#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
#include<ostream>

using namespace std;

/**

UFSets类的设计思路:
用STL的容器vector以及algorithm库的算法来进行设计

**/
class UFSets {
   
private:
/**
	
用vector的原因:
1.vector自带智能指针,不需要进行特殊的删除,所以可以用默认析构函数
2.vector本身自带了许多检测函数比较方便

**/
	vector<int> data;            
	

public:
	UFSets();                   //构造函数,用来在空集上确定具体的元素
	~UFSets();                  //析构函数,这里用默认构造函数

	bool isEmpty();             //确定是否为空集
	bool isContain(int element) const;             //确定是否包含某一个元素
	bool isEquality( const UFSets& anotherSets);   //判断两个集合是否相等
	bool isSubSets(const UFSets& anotherSets);    //判断是否为子集

	void add(int element);                          //只是单纯的增加一个元素
	void addElement(int element[], int length);      //增加一组元素
	void del(int element);                           //删除一个元素

	UFSets unionSet(const UFSets& anotherSets);          //并集操作
	UFSets intersectSet(const UFSets& anotherSets);      //交集操作
	UFSets differenceSet(const UFSets& anotherSets);      //差集操作
	UFSets symDif(const UFSets& anotherSets);            //全名:Symmetric difference,对称差运算

	int getCount() const;           //返回元素的个数
	void Print() const;             //打印当前的元素  


};

#endif

1.2 抽象基类的实现 UFSets.cpp

//该文章的原创作者:阿伟加油鸭。首发于CSDN平台,装载请标注博文出处。
//网址:https://blog.csdn.net/qq_45877524/article/details/106972508


#include "UFSets.h"

//首先将vector容器设置为空
UFSets::UFSets()
{
   
	data = {
    };
}

UFSets::~UFSets()
{
   
}


bool UFSets::isEmpty()
{
   
	//bool std::vector<int>::empty() const 如果为空返回true,不为空为false
	if (data.empty() == true)
		return true;
	else
		return false;
}

bool UFSets::isContain(int element) const
{
   
	//find函数用迭代器找元素,找的到就返回他在vector的位置,找不到就算球
	if (find(data.begin(), data.end(), element) != data.end())
		return true;
	else
		return false;
}


//其实该函数可以用vector自带的重载运算符==,来进行判断,但是打完才想起来算了
bool UFSets::isEquality(const UFSets& anotherSets)
{
   
	if (data.size() != anotherSets.data.size()) {
           //连长度都不相等,肯定不相等
		return false;
	}

	for (int i = 0; i < data.size(); i++) {
   
		for(int j = 0;j < anotherSets.data.size();j++)   
  • 11
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值