1. 集合论简介

集合论,是数学的一个基本的分支学科,研究对象是一般集合。集合论在数学中占有一个独特的地位,它的基本概念已渗透到数学的所有领域。集合论或集论是研究集合(由一堆抽象物件构成的整体)的数学理论,包含了集合、元素和成员关系等最基本的数学概念。

在我们还在高中教育阶段,可能或多或少会接触到一些诸如集合并交差的运算,而集合论与我们C++的STL运算有很多相似而相同的关系。

2. 集合关系

我们假设有两个集合:

A={2,4,6}

B={1,2,3,4,5}

在数学上

交运算可以写为:QQ图片20191007181021.png


并运算可以写为:QQ图片20191007181007.png

差运算可以写为:QQ图片20191007181041.png

我们以该内容为例,进行代码介绍。

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插入器将数据插入到某一个向量或者其他容器之中,并交差是我们集合运算中的最基本的运算,有了这几种运算,我们可以构建出非常多的集合论中的各种功能,以达到我们的数学功能。


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)