当前位置: 首页 > news >正文

第九层(16):STL终章——常用集合算法

文章目录

  • 前情回顾
  • 常用集合算法
    • set_intersection
    • set_union
    • set_difference
  • 最后一座石碑倒下,爬塔结束
  • 一点废话

🎉welcome🎉
✒️博主介绍:一名大一的智能制造专业学生,在学习C/C++的路上会越走越远,后面不定期更新有关C/C++语法,数据结构,算法,Linux,ue5使用,制作游戏的心得,和大家一起共同成长。
✈️C++专栏:C++爬塔日记
😘博客制作不易,👍点赞+⭐收藏+➕关注

前情回顾

在上一块石碑中,我学到了,同时下一块石碑也显露出来…

  • 🚄上章地址:第九章(15):STL之常用算术生成算法

常用集合算法

  • 常用集合算法是用于得出两个容器的交集并集和差集的,有三个:
set_intersection//求两个容器的交集
set_union//求两个容器的并集
set_difference//求两个容器的差集

set_intersection

  • 求两个容器的交集,交集就是两个元素重复的部分,它会返回的是一个迭代器,就是存放这个交集的容器中的最后一个元素的迭代器,对于存放交集的容器时需要去提前开辟好空间的,最特殊的情况就是一个容器是另一个容器的子集,那对于存放交集的容器最大空间就是两个容器中小的那个,可以利用min函数来判断谁大谁小
min(size1,size2);
  • 使用min需要引头文件:algorithm
set_intersection(beg1,end1,beg2,end2,dest);
  • beg1是容器1的开始迭代器,end1是容器1的结束迭代器,beg2是容器2的开始迭代器,end2是容器2的结束迭代器,dest是目标容器的开始迭代器

使用:

#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>int main()
{vector<int> a, b;for (int i = 0; i < 10; i++){a.push_back(i);b.push_back(i + 3);}vector<int> a_b;a_b.resize(min(a.size(), b.size()));cout << "a和b的交集是:";for (auto d = a_b.begin(); d < set_intersection(a.begin(), a.end(), b.begin(), b.end(), a_b.begin()); d++){cout << *d << " ";}cout << endl;return 0;
}

在这里插入图片描述

set_union

  • 求两个容器的并集,就是两个容器内所有元素集合在一起,但是重复元素只有一份,没有多份,所有对于并集,最特殊的情况就是两个容器内部没有重复元素,那需要给并集容器开辟的空间就是两个容器加起来
set_union(beg1,end1,beg2,end2,dest);
  • beg1是容器1的开始迭代器,end1是容器1的结束迭代器,beg2是容器2的开始迭代器,end2是容器2的结束迭代器,dest是目标容器的开始迭代器

使用:

#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>int main()
{vector<int> a, b;for (int i = 0; i < 10; i++){a.push_back(i);b.push_back(i + 3);}vector<int> a_b;a_b.resize(a.size()+b.size());cout << "a和b的并集是:";for (auto d = a_b.begin(); d < set_union(a.begin(), a.end(), b.begin(), b.end(), a_b.begin()); d++){cout << *d << " ";}cout << endl;return 0;
}

在这里插入图片描述

set_difference

  • 两个容器的差集,差集的意思是,容器1中有,容器2中没有,对于差集而言,最特殊的情况为,两者之间没有共同元素,那差集就是较大的元素个数就是大容器的大小,可以用max得出,用于与min相同
set_difference(beg1,end1,beg2,end2,dest);

使用:

#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>int main()
{vector<int> a, b;for (int i = 0; i < 10; i++){a.push_back(i);b.push_back(i + 3);}vector<int> a_b;a_b.resize(max(a.size(), b.size()));cout << "a和b的差集集是:";for (auto d = a_b.begin(); d < set_difference(a.begin(), a.end(), b.begin(), b.end(), a_b.begin()); d++){cout << *d << " ";}cout << endl;return 0;
}

在这里插入图片描述

最后一座石碑倒下,爬塔结束

  • “轰”,面前的石碑轰然倒下了,露出了一片广袤的天地,和一方莲台,莲台上坐着的是一位老者,老者浑身都透露出来自C++的强大波动,在石碑中感受不到的力量,那个老者看到我露出了笑容:“我就知道你可以来到这里,孩子,这座塔只是告诉你怎么去使用的,像熟练的使用C++的力量,还需要你坚持不懈的去熟悉他,使用它,加油吧,未来的路还很长,我期待你未来的成长…"

一点废话

  • hi,相信看文章的各位小伙伴对我已经不是很陌生了,这是我第一个真正意义上付出心血的专栏文章,虽然对于后面对STL进行介绍讲解的时候文章的质量并不是很好,我只是将使用描述了出来,并没有进行深度的剖析,对于这点我深表歉意,虽然但是,对于前面面向对象的内容我还是很有自信的,虽然介绍还是很浅薄,但是希望可以对于正在阅读文章的你有所帮助,C++爬塔日记这个专栏正式结束,下一个专栏我会为大家带来一个会进行长期更新的专栏——单片机的专栏,并且算法专栏也会在不久之后和大家见面了,浅浅期待一下吧!最后的最后,谢谢各位读者能看到这里,万分感谢!

🚀专栏:C++爬塔日记
🙉都看到这里了,留下你们的👍点赞+⭐收藏+📋评论吧🙉

http://www.lryc.cn/news/1512.html

相关文章:

  • 一起学习用Verilog在FPGA上实现CNN----(六)SoftMax层设计
  • pixhawk2.4.8-APM固件-MP地面站配置过程记录
  • 【unity细节】关于资源商店(Package Maneger)无法下载资源问题的解决
  • [Arxiv 2022] A Novel Plug-in Module for Fine-Grained Visual Classification
  • RocketMQ Broker消息处理流程及部分源码解析
  • Java面试题:Java集合框架
  • 时间之间的比较与计算相差年、月、日、小时、分钟、毫秒、纳秒以及判断闰年--LocalDateTime
  • PyTorch学习笔记:nn.L1Loss——L1损失
  • Java程序设计-ssm企业财务管理系统设计与实现
  • 疑难杂症篇(二十一)--Ubuntu18.04安装usb-cam过程出现的问题
  • npm-npm i XX --save 和--save-dev
  • 可重构或可调谐微波滤波器技术
  • 医院智能化解决方案-门(急)诊、医技、智能化项目解决方案
  • 判断元素是否在可视区域
  • 告别传统繁杂的采购合同管理 打造企业自动化采购管理模式
  • 【prism】路由事件映射到Command命令
  • 面向对象的基本概念和方法
  • 数据可视化大屏百度地图绘制行政区域标注实战案例解析(个性化地图、标注、视频、控件、定位、检索)
  • 1.面向对象和类的关系?2.什么是Promise、3.Promise和async、await的关系
  • 【程序化天空盒】过程记录01:日月 天空渐变 大气散射
  • 无线通信中的轨道角动量
  • 以后更新功能,再也不用App发版了!智能小程序将为开发者最大化减负
  • C++之类模板全特化和偏特化
  • Python 手写数字识别 MNIST数据集下载失败
  • 华为机试题:HJ61 放苹果(python)
  • 【论文速递】ICCV2021 - 基于超相关压缩实现实时高精度的小样本语义分割
  • 单例模式(Singleton Pattern)
  • docker file和compose
  • 如何解决thinkphp验证码不能显示问题?
  • Vue极简使用