目录
集合论简介
集合论,是数学的一个基本的分支学科,研究对象是一般集合。集合论在数学中占有一个独特的地位,它的基本概念已渗透到数学的所有领域。集合论或集论是研究集合(由一堆抽象物件构成的整体)的数学理论,包含了集合、元素和成员关系等最基本的数学概念。
在我们还在高中教育阶段,可能或多或少会接触到一些诸如集合并交差的运算,而集合论与我们C++的STL运算有很多相似而相同的关系。
集合关系
我们假设有两个集合:
A={2,4,6}
B={1,2,3,4,5}
在数学上
交运算可以写为:
并运算可以写为:
差运算可以写为:
我们以该内容为例,进行代码介绍。
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]<<' ';
}
}
集合论与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插入器将数据插入到某一个向量或者其他容器之中,并交差是我们集合运算中的最基本的运算,有了这几种运算,我们可以构建出非常多的集合论中的各种功能,以达到我们的数学功能。