1. 集合论简介
集合论,是数学的一个基本的分支学科,研究对象是一般集合。集合论在数学中占有一个独特的地位,它的基本概念已渗透到数学的所有领域。集合论或集论是研究集合(由一堆抽象物件构成的整体)的数学理论,包含了集合、元素和成员关系等最基本的数学概念。
在我们还在高中教育阶段,可能或多或少会接触到一些诸如集合并交差的运算,而集合论与我们C++的STL运算有很多相似而相同的关系。
2. 集合关系
我们假设有两个集合:
A={2,4,6}
B={1,2,3,4,5}
在数学上
交运算可以写为:
并运算可以写为:
差运算可以写为:
我们以该内容为例,进行代码介绍。
3. Algorithm头文件
STL的算法头文件,STL中除了我们常用的这些容器文件以外,还有一个极其重要的头文件,Algorithm,他是我们常用的标准算法的集合,为我们预先封装了我们可能会用到的算法,比如说排序,使用Algorithm头文件中的sort函数可以快速帮我们进行数组排序,以下是实例代码:
#include<iostream> #include<algorithm> using namespace std; int main(){ int a[6]={1,5,9,4,6,3}; sort(a,a+6); //使用STL的快速排序算法 for(int i=0;i<6;i++){ cout<<a[i]<<' '; } }
4. 集合论与STL集合
在数学上的并运算我们可以使用set_union()函数进行实现,而交运算我们也可以使用set_intersection()函数进行实现,差集则使用set_difference()函数实现,以下是简单的实现代码,这个案例会同时提供一些前面所学的知识,当作一个汇总练习。
#include <iostream> #include <set> #include <vector> #include <algorithm> //使用算法头文件 using namespace std; int main(){ set<int> a, b; //建立两个集合 vector<int> c; //建立一个向量,我们用这个向量存储运算结果 //a = {2,4,6}; a.insert(2); a.insert(4); a.insert(6); //b = {1,2,3,4,5}; b.insert(1); b.insert(2); b.insert(3); b.insert(4); b.insert(5); set_union(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c));//并集 for(vector<int>::iterator it=c.begin();it!=c.end();it++){ cout<< *it << ' '; } cout<<endl; c.clear(); set_intersection(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c));//交集 for(vector<int>::iterator it=c.begin();it!=c.end();it++){ cout<< *it << ' '; } cout<<endl; c.clear(); set_difference(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c)); //差集 从B中减去A包含的元素 for(vector<int>::iterator it=c.begin();it!=c.end();it++){ cout<< *it << ' '; } cout<<endl; c.clear(); return 0; }
可以见的,以上的三个函数,其使用方法均是第一个集合开始到结束,第二个集合开始到结束,然后使用back_inserter插入器将数据插入到某一个向量或者其他容器之中,并交差是我们集合运算中的最基本的运算,有了这几种运算,我们可以构建出非常多的集合论中的各种功能,以达到我们的数学功能。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程