STL 中集合操作相关算法

2023-11-14

merge

①.头文件

merge 算法定义在头文件 #include 中。

②.算法作用

merge 算法是合并两个有序的序列,合并结果拷贝到一个新的序列,前提是这两个序列的排序规则一样。

③.代码示例

vector<int> vec1 = { 1,2,3,4 };
 vector<int> vec2 = { 5,6,7,8 };

 cout << "原序列 vec1:" << endl;
 for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
 cout << endl << "原序列 vec2:" << endl;
 for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

 vector<int> vec3;
 merge(vec1.begin(), vec1.end(),vec2.begin(),vec2.end(), back_inserter(vec3));

 cout << endl << "新序列:" << endl;
 for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

set_union

①.头文件

set_union 算法定义在头文件 #include 中。

②.算法作用

set_union 算法作用是求两个有序序列的并集,合并结果包含所有的不重复元素,并拷贝到一个新的序列,前提是这两个序列的排序规则一样。

③.代码示例

vector<int> vec1 = { 1,2,3,4,5,6 };
vector<int> vec2 = { 4,5,6,7,8,9 };

cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

vector<int> vec3;
set_union(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vec3));

cout << endl << "新序列:" << endl;
for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

set_intersection

①.头文件

set_intersection 算法定义在头文件 #include 中。

②.算法作用

set_intersection 算法作用是求两个有序序列的交集,合并结果是两个集合重合的元素,并拷贝到一个新的序列,前提是这两个序列的排序规则一样。

③.代码示例

vector<int> vec1 = { 1,2,3,4,5,6 };
vector<int> vec2 = { 4,5,6,7,8,9 };

cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

vector<int> vec3;
set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vec3));

cout << endl << "新序列:" << endl;
for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

set_difference

①.头文件

set_difference 算法定义在头文件 #include 中。

②.算法作用

set_difference 算法作用是求两个有序序列的差集,合并结果是在第一个集合中存在而在第二个集合中不存在的元素,并拷贝到一个新的序列,前提是这两个序列的排序规则一样。

③.代码示例

vector<int> vec1 = { 1,2,3,4,5,6 };
vector<int> vec2 = { 4,5,6,7,8,9 };

cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

vector<int> vec3;
set_difference(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vec3));

cout << endl << "新序列:" << endl;
for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

set_symmetric_difference

①.头文件

set_symmetric_difference 算法定义在头文件 #include 中。

②.算法作用

set_symmetric_difference 算法作用是求两个有序序列的异或集,合并结果是两个序列合并后去除重合的元素,并拷贝到一个新的序列,前提是这两个序列的排序规则一样。

③.代码示例

vector<int> vec1 = { 1,2,3,4,5,6 };
vector<int> vec2 = { 4,5,6,7,8,9 };

cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
cout << endl << "原序列 vec2:" << endl;
for_each(vec2.begin(), vec2.end(), [](int i) {cout << i << " "; });

vector<int> vec3;
set_symmetric_difference(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vec3));

cout << endl << "新序列:" << endl;
for_each(vec3.begin(), vec3.end(), [](int i) {cout << i << " "; });

在这里插入图片描述

next_permutation

①.头文件

next_permutation 算法定义在头文件 #include 中。

②.算法作用

next_permutation 算法作用是获取序列的下一个按字典序排列。

③.代码示例

vector<int> vec1 = { 1,2,3 };
   
cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });

cout << endl << "全排列:" << endl;
do 
{
    for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
    cout << endl;
} while (next_permutation(vec1.begin(), vec1.end()));

在这里插入图片描述

prev_permutation

①.头文件

prev_permutation 算法定义在头文件 #include 中。

②.算法作用

prev_permutation 算法作用是获取序列的上一个按字典序排列。

③.代码示例

vector<int> vec1 = { 3,2,1 };
   
cout << "原序列 vec1:" << endl;
for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });

cout << endl << "全排列:" << endl;
do 
{
    for_each(vec1.begin(), vec1.end(), [](int i) {cout << i << " "; });
    cout << endl;
} while (prev_permutation(vec1.begin(), vec1.end()));

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STL 中集合操作相关算法 的相关文章

随机推荐

  • go 调用dll char*传输

    参考 http www voidcn com article p ofnbgvoa bpv html https stackoverflow com questions 53721215 syscall mustloaddll mustfi
  • 基于EasyCode 的mybatis-plus 的代码生成器, 支持多表多条件分页查询

    注意mapper xml不要用 AS 来定义表的别名字段的别名 where标签不要用大写 ew是mybatisplus写死的 不要修改 使用mybatis的 Select注解来写page有bug 例子 Select
  • BZOJ4817 [Sdoi2017]树点涂色(洛谷P3703)

    LCT 线段树 BZOJ题目传送门 洛谷题目传送门 码力不行啊 操作1就是access啦 操作2就是 w x w y 2 w lca x y 1 w x w y 2
  • 利用Libev写一个简单的client和server程序

    利用Libev写一个简单的client和server程序 common h程序 ifndef COMMON H define COMMON H include
  • 15 移动端app自动化测试 - 软件测试

    软件测试所有内容笔记正在陆续更新中 笔记已经在本地记录 全部为自己手动记录的笔记及总结 正在开始更新中 后续会逐步更新并完善到 软件测试学习内容总结 专栏 本节内容 移动端app自动化测试 文章目录 1 appium环境安装与架构介绍 1
  • linux常用命令:文本编辑

    目录 三 文本编辑 1 vim三种工作模式 2 常用命令 3 插入文本快捷键 4 查找文本快捷键 5 查找文本效果图 6 替换文本快捷键 7 删除文本快捷键 8 复制和粘贴文本快捷键 9 保存退出文本命令 10 参考文章 三 文本编辑 一般
  • 二值分类模型的评价指标

    二值分类模型的评价指标主要有 Precision Recall F Score ROC and AUC ROC Receiver Operating Characteristic ROC曲线的横坐标为false positive rate
  • linux gsoap服务端,gsoap linux下服务器端代码生成与测试

    二 解压压缩包 ios 三 进入cd gSoap gsoap 2 8 gsoap bin linux386函数 四 建立一个头文件serverTest h测试 gsoap ns service name calc gsoap ns serv
  • Python selenium错误:ElementNotInteractableException: Message: element not interactable: Element is not

    脚本没问题 但是执行时报错 selenium common exceptions ElementNotInteractableException Message element not interactable Element is not
  • [Python图像处理] 五.图像融合、加法运算及图像类型转换

    该系列文章是讲解Python OpenCV图像处理知识 前期主要讲解图像入门 OpenCV基础用法 中期讲解图像处理的各种算法 包括图像锐化算子 图像增强技术 图像分割等 后期结合深度学习研究图像识别 图像分类应用 希望文章对您有所帮助 如
  • javascript的深拷贝和浅拷贝

    当我们将一个变量的值赋给另外一个变量时 需要注意用的是深拷贝还是浅拷贝 深拷贝是另外开辟地址空间 浅拷贝是和被拷贝数据地址一样 详见 https github com YvetteLau Step By Step issues 17
  • element-ui 的confirm用法

    在点击函数里变嵌入一下代码 this confirm 确认删除 系统提示 confirmButtonText 确定 cancelButtonText 取消 cancelButtonClass btn custom cancel type w
  • 解决websocket使用@Autowired、@Value获取值为null解决方法

    解决webSocker中使用 Value获取配置文件中值为null 1 常规写法 在webSocker中使用 Value 取值为null 2 原因分析 3 解决问题 1 常规写法 在webSocker中使用 Value 取值为null Co
  • 浏览器渲染原理

    页面渲染流程 浏览器收到web网页的内容后会开始下载 HTML CSS JS 并绘制 DOM 树和 CSS 树 当两颗树都绘制完成后会合并成一个渲染树 然后再经过Layout Paint Composite 最终完成渲染 HTML 解析会被
  • hortonworks/registry配置详解

    1 美图 2 配置 deploy demo db registry cat conf registry yaml registries configuration modules name schema registry className
  • 什么是CSRF攻击,以及如何防御

    什么是CSRF攻击 以及如何防御 1 CSRF攻击的概念 2 CSRF攻击简单案例 2 1 银行网站项目 2 2 危险网站的项目 2 3 测试 3 默认的CSRF防御策略 4前后端分离的CSRF防御策略 1 CSRF攻击的概念 1 CSRF
  • MPI群通信与矩阵乘法的Fox算法实现

    原本以为 MPI天生只能在Linux上运行 但这次却发现了Intel MPI Library 这个好用的东西 基本不需要设置 安上之后 用自己能登录windows的帐号和密码注册就行了 虽然不是局域网上的机器 但也可以让我的双核CPU达到1
  • WebSocket协议之NGINX代理转发无法建立连接问题处理

    WebScoket协议如需要通过nginx代理 需要location 节点增加以下节点即可正常建立连接 需要配置以下节点 proxy http version 1 1 proxy set header Upgrade http upgrad
  • Python入门网络爬虫之精华版,赶快收藏

    相关文件 关注小编 私信小编领取哟 当然别忘了一件三连哟 公众号 Python日志 前言 Python学习网络爬虫主要分3个大的版块 抓取 分析 存储 另外 比较常用的爬虫框架Scrapy 这里最后也详细介绍一下 举例子 当我们在浏览器中输
  • STL 中集合操作相关算法

    merge 头文件 merge 算法定义在头文件 include 中 算法作用 merge 算法是合并两个有序的序列 合并结果拷贝到一个新的序列 前提是这两个序列的排序规则一样 代码示例 vector