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. go 1.21:cmp

    标准库 cmp 原文在这里 go 1.21 新增 cmp 包提供了与有序变脸比较相关的类型和函数. Ordered 定义如下: type Ordered interface { ~int | ~int ...

  2. 西门子PLC高校作业以及创新项目

    抢答器 在主持人按下启动按钮,3秒内

  3. SQL 训练题目

    title: SQL 训练题目 date: 2023-7-15 01:45:50 tags: - SQL 训练 一. 查询 "01" 课程比 "02" 课程成绩 ...

  4. 8.4 Windows驱动开发:文件微过滤驱动入门

    MiniFilter 微过滤驱动是相对于SFilter传统过滤驱动而言的,传统文件过滤驱动相对来说较为复杂,且接口不清晰并不符合快速开发的需求,为了解决复杂的开发问题,微过滤驱动就此诞生,微过滤驱动在 ...

  5. Python PyWin32 模块

    Python的生产效率极高,通过使用pypiwin32模块可以快速调用windows API函数,结合Python的高效开发能力,同等时间内比C++能更快的达到目标,pypiwin32模块封装了Win ...

  6. Django后台输出原生SQL语句

    如果需要打印orm翻译后的原生sql语句,只需要在setting最后加上下面代码就行. 1 LOGGING = { 2 'version': 1, 3 'disable_existing_logger ...

  7. 外部文件使用django的models

    #外部文件使用django的models,需要配置django环境 import os if __name__ == '__main__': os.environ.setdefault("D ...

  8. 【Linux】虚拟机太卡咋办?用云服务器Xshell配置Vmware虚拟机【技能篇】

    [Linux]用云服务器Xshell配置Vmware虚拟机[技能篇] 强烈建议本篇收藏后再食用~ 文章目录 Xshell下载 配置Vmware 尾声 平时我们使用虚拟机,可能最烦人的问题就是卡顿了.今 ...

  9. Leetcode刷题第二天-贪心

    655:非递减数列 链接:665. 非递减数列 - 力扣(LeetCode) 直接找最大最小值进行替换不行,[1,5,4,6,7,8,9]最大最小值所处位置可能是非递减数列 如果nums[i]> ...

  10. (python)每日代码||2024.1.18||元组中的列表成员可以改变内容,不可以改变该列表成员

    t = ([1,2,3],[2,3,4],3) print(t) t[0][1]=9 print(t) # ~ t[2]=9#TypeError: 'tuple' object does not su ...