STL——集合算法

算法简介:

  • set_intersection // 求两个容器的交集
  • set_union // 求两个容器的并集
  • set_difference // 求两个容器的差集

1.set_intersection

函数原型:

  • set_intersection(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);——// 求两个集合的交集;注意:两个集合必须是有序序列;beg1 容器1开始迭代器;end1 容器1结束迭代器;beg2 容器2开始迭代器 ;end2 容器2结束迭代器 ;dest 目标容器开始迭代器
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//set_intersection——集合算法
void Print(int val)
{cout << val << " ";
}
void test()
{vector<int>v1;vector<int>v2;vector<int>vTarget;for (int i = 0; i < 10; i++){v1.push_back(i);v2.push_back(i + 5);}vTarget.resize(min(v1.size(), v2.size()));vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, Print);cout << endl;
}
int main()
{test();system("pause");return 0;
}

 注:

  • 求交集的两个集合必须是有序序列
  • 目标容器开辟空间需要取两个容器的最小值
  • set_intersection返回值既是交集中最后一个元素的位置

2.set_union

函数原型:

  • set_union(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);——// 求两个集合的并集;注意:两个集合必须是有序序列; beg1 容器1开始迭代器 ;end1 容器1结束迭代器; beg2 容器2开始迭代器; end2 容器2结束迭代器 ;dest 目标容器开始迭代器
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//set_union——集合算法
void Print(int val)
{cout << val << " ";
}
void test()
{vector<int>v1;vector<int>v2;vector<int>vTarget;for (int i = 0; i < 10; i++){v1.push_back(i);v2.push_back(i + 5);}vTarget.resize(v1.size() + v2.size());vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, Print);cout << endl;
}
int main()
{test();system("pause");return 0;
}

 注:

  • 求并集的两个集合必须的有序序列
  • 目标容器开辟空间需要两个容器相加
  • set_union返回值既是并集中最后一个元素的位置

3.set_difference

函数原型:

  • set_difference(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);——// 求两个集合的差集; 注意:两个集合必须是有序序列;beg1 容器1开始迭代器 ;end1 容器1结束迭代器 ; beg2 容器2开始迭代器 ; end2 容器2结束迭代器 ;dest 目标容器开始迭代器
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//set_difference——集合算法
void Print(int val)
{cout << val << " ";
}
void test()
{vector<int>v1;vector<int>v2;vector<int>vTarget;for (int i = 0; i < 10; i++){v1.push_back(i);v2.push_back(i + 5);}vTarget.resize(max(v1.size(), v2.size()));//v1和v2的差集vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());for_each(vTarget.begin(), itEnd, Print);cout << endl;//v2和v1的差集vector<int>::iterator itEnd2 = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());for_each(vTarget.begin(), itEnd2, Print);cout << endl;
}
int main()
{test();system("pause");return 0;
}

 注:

  • 求差集的两个集合必须的有序序列
  • 目标容器开辟空间需要从两个容器取较大值
  • set_difference返回值既是差集中最后一个元素的位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/310156.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

史上最好用的SSH工具,好用到超出你的想象

给大家推荐一个功能强大&#xff0c;跨平台切风格很现代化的SSH管理工具——Xterminal。 1、功能特点 布局自由 命令管理 酷炫皮肤 在线编辑 文件上传方式多样 本地融合显示 支持rzsz 文件断点上传 服务器监控 2、来吧&#xff0c;展示 布局自由 双击修改标题 自…

.FileZilla的使用和主动模式被动模式介绍

FileZilla的使用和主动模式被动模式介绍 1.FileZilla的使用和主动模式被动模式介绍1.安装下载2.新建组和用户2.1打开后出现如下界面2.2点击编辑打开组这个选项2.3点击添加组以后&#xff0c;点击确认2.4输入组的名称&#xff0c;列如我输入的niyin2.5点击用户选项2.6像上面一样…

【owt-server】一些构建项目梳理

【owt-server】清理日志&#xff1a;owt、srs、ffmpeg 【owt】p2p client mfc 工程梳理【m98】webrtc vs2017构建带符号的debug库【OWT】梳理构建的webrtc和owt mfc工程 m79的mfc客户端及owt-client

K8S容器的一则故障记录

一、故障现象 XXX反馈说某某业务服务异常&#xff0c;无法启动&#xff0c;需要进行协助排查。经常会接到这样一个需求&#xff0c;一开始无法清楚知道具体什么问题&#xff0c;需要跟一线运维人员详细做沟通&#xff0c;了解故障问题的细节。 根据一线运维人员的反馈&#xff…

git基础概念和常用命令(日常开发收藏备用)

目录 ### 常用命令 ### 远程仓库与克隆 ### 分支管理 ### 子模块&#xff08;Submodule&#xff09; ### 其他高级操作 ### 交互式暂存&#xff08;Interactive Staging&#xff09; ### cherry-pick ### rebase ### reflog与reset ### 子树合并&#xff08;Subtree …

Spring Data Redis对象缓存序列化问题

相信在项目中&#xff0c;你一定是经常使用 Redis &#xff0c;那么&#xff0c;你是怎么使用的呢&#xff1f;在使用时&#xff0c;有没有遇到同我一样&#xff0c;对象缓存序列化问题的呢&#xff1f;那么&#xff0c;你又是如何解决的呢&#xff1f; Redis 使用示例 添加依…

IntelliJ IDEA常用快捷键

【1】创建内容&#xff08;新建&#xff09;&#xff1a;altinsert 【2】main方法&#xff1a;psvm 【3】输出语句&#xff1a;sout 【4】复制行&#xff1a;ctrld 【5】删除行&#xff1a;ctrly&#xff08;很多编辑器ctrly是前进操作&#xff0c;如果选择 Delete Line&…

40道MyBatis面试题带答案(很全)

1. 什么是MyBatis &#xff08;1&#xff09;Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了JDBC&#xff0c;开发时只需要关注SQL语句本身&#xff0c;不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接…

C++编程中级阶段

目录 1.模版 1.1函数模版 1.1.1函数模版语法 1.1.2函数模版注意事项 1.1.3函数模版案例 1.1.4普通函数与函数模板的区别 1.1.5普通函数与函数模板的调用规则 1.1.6模版的局限性 1.2类模版 2.STL处识 3.STL常用容器 3.1string容器 3.2vector容器 3.3deque容器 3.…

工作中常用的 git 命令

了解版本控制 什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 什么是分布式版本控制系统分布式版本控制系统( Distributed Version Control System&#xff0c;简称 DVCS )。 在这类系统中&#xff0c;像…

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题)

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 第一部分&#xff1a;数据安全防护(30%) 第二部分&#xff1a;数据安全管理(30%) 第三部分&#xff1a;数据安全处置(40%) 项目介绍…

【Transformer】深入理解Transformer模型2——深入认识理解(上)

前言 Transformer模型出自论文&#xff1a;《Attention is All You Need》 2017年 近年来&#xff0c;在自然语言处理领域和图像处理领域&#xff0c;Transformer模型都受到了极为广泛的关注&#xff0c;很多模型中都用到了Transformer或者是Transformer模型的变体&#xff0…