1 //常用集合算法
2 //set_intersection //求俩个容器的交集
3 //set_union //求两个容器的并集
4 //set_difference //求两个容器的差集
5
6 #include<iostream>
7 #include<vector>
8 #include<algorithm>
9 using namespace std;
10
11
12 void myprint(int v)
13 {
14 cout << v << " ";
15 }
16 //set_intersection //求俩个容器的交集 (必须是有序序列)
17 void test01()
18 {
19 vector<int>v1;
20 vector<int>v2;
21
22
23 for (int i = 0; i < 10; i++)
24 {
25 v1.push_back(i); //0 -9
26 v2.push_back(i + 5); //5-14
27 }
28
29 vector<int>vTarget;
30 //目标容器需要提前开辟空间.
31 //最特殊的情况 大容器包含小容器 开辟空间 取小容器的size
32 vTarget.resize(min(v1.size(), v2.size()));
33
34 //获取交际
35 vector<int>::iterator itEnd=set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
36
37 for_each(vTarget.begin(), itEnd, myprint);
38 cout << endl;
39
40 }
41
42 //set_union 并集 有序序列
43
44 class MyPrint
45 {
46 public:
47
48 void operator()(int l)
49 {
50 cout << l << " ";
51 }
52 };
53
54
55 void test02()
56 {
57 vector<int>v1;
58 vector<int>v2;
59
60 for (int i = 0; i < 10; i++)
61 {
62 v1.push_back(i);
63 v2.push_back(i + 5);
64 }
65
66 vector<int>vTarget;
67 //最特殊的情况是 没有交集 并集两个容器相加
68 vTarget.resize(v1.size()+v2.size());
69
70 vector<int>::iterator itEnd=set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
71 for_each(vTarget.begin(), itEnd, MyPrint());
72 cout << endl;
73
74 }
75
76 //set_difference //求两个容器的差集
77 void myPrint(int vc)
78 {
79 cout << vc << " ";
80 }
81 void test03()
82 {
83 vector<int>v1;
84 vector<int>v2;
85
86 for (int i = 0; i < 10; i++)
87 {
88 v1.push_back(i);
89 v2.push_back(i + 5);
90 }
91
92 //差集放到目标容器中
93 //最特殊的情况 两个容器没有交集 取大的空间
94 vector<int>vTarget;
95 vTarget.resize(max(v1.size(), v2.size()));
96
97 cout << "V1和V2的差集" << endl;
98 vector<int>::iterator Itend = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
99
100
101 for_each(vTarget.begin(), Itend, myPrint);
102 cout << endl;
103
104 cout << "V2和V1的差集" << endl;
105 Itend = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());
106
107 for_each(vTarget.begin(), Itend, myPrint);
108 cout << endl;
109
110 }
111
112 int main()
113 {
114 test01();
115
116 test02();
117
118 test03();
119 system("pause");
120 return 0;
121 }

C++ //常用集合算法 //set_intersection //求俩个容器的交集 //set_union //求两个容器的并集 //set_difference //求两个容器的差集的更多相关文章

  1. C++进阶 STL(3) 第三天 函数对象适配器、常用遍历算法、常用排序算法、常用算数生成算法、常用集合算法、 distance_逆序遍历_修改容器元素

    01昨天课程回顾 02函数对象适配器 函数适配器是用来让一个函数对象表现出另外一种类型的函数对象的特征.因为,许多情况下,我们所持有的函数对象或普通函数的参数个数或是返回值类型并不是我们想要的,这时候 ...

  2. Python实现常用排序算法

    Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...

  3. Java常用排序算法及性能测试集合

    测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...

  4. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  5. stl集合算法

    accumulate() 累加  accumulate: 对指定范围内的元素求和,然后结果再加上一个由val指定的初始值.  #include<numeric> vector<i ...

  6. STL_算法_05_集合算法

    ◆ 常用的集合算法: 1. 1.1.第6讲 PPT.40 ◆ set_union() :  构造一个有序序列,包含两个有序序列的并集. 1.2.第6讲 PPT.40 ◆ set_intersectio ...

  7. javascript常用经典算法实例详解

    javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...

  8. STL_常用的算法

    STL_常用的算法 一.常用的查找算法 adjacent_find() adjacent_find(iterator beg, iterator end, _callback); 在iterator对 ...

  9. 机器学习04-(决策树、集合算法:AdaBoost模型、BBDT、随机森林、分类模型:逻辑回归)

    机器学习04 机器学习-04 集合算法 AdaBoost模型(正向激励) 特征重要性 GBDT 自助聚合 随机森林 分类模型 什么问题属于分类问题? 逻辑回归 代码总结 波士顿房屋价格数据分析与房价预 ...

  10. c语言求平面上2个坐标点的直线距离、求俩坐标直线距离作为半径的圆的面积、递归、菲波那次数列、explode

    #include <stdio.h> #include <math.h> #include <string.h> char explode( char * str ...

随机推荐

  1. Redis如何批量删除指定前缀的key

    批量删除指定前缀的Key有两中方法,一种是借助 redis-cli,另一种是通过 SCAN 命令来遍历所有匹配前缀的 key,并使用 DEL 命令逐个删除它们. redis-cli 使用 Redis ...

  2. 升级到win11 22h2的体验

    win11 22h2更稳定了 在win11 22h2发布后没多久,我就升级到了这个版本,截止目前已经使用半个月了,谈谈我的使用感受. 总体要比之前的版本更稳定,表现为笔记本风扇不会突然响,突然卡顿,不 ...

  3. go中context源码解读

    context 前言 什么是context 为什么需要context呢 context底层设计 context的实现 几种context emptyCtx cancelCtx timerCtx val ...

  4. 深入浅出Java多线程(一):进程与线程

    引言 大家好,我是你们的老伙计秀才. 在计算机系统的发展历程中,早期的计算机操作模式十分单一和低效.用户只能逐条输入指令,而计算机则按照接收指令的顺序逐一执行,一旦用户停止输入或进行思考,计算机会处于 ...

  5. 金融时间序列预测方法合集:CNN、LSTM、随机森林、ARMA预测股票价格(适用于时序问题)、相似度计算、各类评判指标绘图(数学建模科研适用)

    金融时间序列预测方法合集:CNN.LSTM.随机森林.ARMA预测股票价格(适用于时序问题).相似度计算.各类评判指标绘图(数学建模科研适用) 1.使用CNN模型预测未来一天的股价涨跌-CNN(卷积神 ...

  6. 2.5 PE结构:导入表详细解析

    导入表(Import Table)是Windows可执行文件中的一部分,它记录了程序所需调用的外部函数(或API)的名称,以及这些函数在哪些动态链接库(DLL)中可以找到.在Win32编程中我们会经常 ...

  7. 初步上手Git软件及GitHub平台:基本操作方法

      本文介绍Git软件与GitHub平台的基本内容.使用方法与应用场景等. 目录 1 初步介绍 2 使用方法 2.1 GitHub配置 2.2 Git配置 2.3 代码上传至GitHub 1 初步介绍 ...

  8. 安装DNS服务

    实验介绍: DNS的作用 DNS中文名为域名系统 它能实现域名与IP地址的互相转换 域名的命名 www.cnblogs.com 其中.com是网站是顶级域名,.cnblogs是博客园是二级域名,www ...

  9. Hive中insert into 和 insert overwrite的区别

    相同点 insert into 和 insert overwrite 都是往表中插入数据的. 不同点 区别1: insert into :其实是将数据追加到表的末尾,注意:不是覆盖,是追加. inse ...

  10. AT_abc270_g [ABC270G] Sequence in mod P 题解

    题目传送门 前置知识 大步小步算法 解法 递推式为 \(x_{n}=(ax_{n-1}+b) \bmod p\),发现可以统一消去 \(\bmod p\) ,只在最后参与计算.以下过程省去模运算. 当 ...