博文首先贴出交集、并集、差集、对称差运算的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++)