• 【C++】常用集合算法


    0.前言

    在这里插入图片描述

    1.set_intersection

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

    #include 
    using namespace std;
    
    
    // 常用集合算法 交集set_intersection
    #include
    #include
    
    void myPrint(int val)
    {
    	cout << val << " ";
    }
    
    void test01()
    {
    	vector<int>v1, v2;
    
    	for (int i = 0; i < 10; i++)
    	{
    		v1.push_back(i);
    		v2.push_back(i + 5);
    	}
    
    	vector<int>TargetV;
    	TargetV.resize(min(v1.size(), v2.size()));
    
    	vector<int>::iterator Itend = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), TargetV.begin());
    
    	for_each(TargetV.begin(), Itend, myPrint);
    	cout << endl;
    }
    
    int main()
    {
    	test01();
    	cout << "------------------------" << endl;
    	//test02();
    	//cout << "------------------------" << endl << endl;
    	//test03();
    
    	//**************************************
    	system("pause");
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    在这里插入图片描述

    2.set_union

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

    #include 
    using namespace std;
    
    
    // 常用集合算法 并集set_union
    #include
    #include
    
    void myPrint(int val)
    {
    	cout << val << " ";
    }
    
    void test01()
    {
    	vector<int>v1, v2;
    	for (int i = 0; i < 10; i++)
    	{
    		v1.push_back(i);
    		v2.push_back(i + 5);
    	}
    
    	vector<int>TargetV;
    	//目标容器提前开辟空间
    	//最特殊情况 两个容器没有交集, 并集就是两个容器size相加
    	TargetV.resize(v1.size() + v2.size());
    
    	vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), TargetV.begin());
    
    	for_each(TargetV.begin(), itEnd, myPrint);
    	cout << endl;
    }
    
    int main()
    {
    	test01();
    	cout << "------------------------" << endl;
    	//test02();
    	//cout << "------------------------" << endl << endl;
    	//test03();
    
    	//**************************************
    	system("pause");
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    在这里插入图片描述

    3.set_difference

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

    #include 
    using namespace std;
    
    
    // 常用集合算法 差集set_difference
    #include
    #include
    
    void myPrint(int val)
    {
    	cout << val << " ";
    }
    
    void test01()
    {
    	vector<int>v1, v2;
    	for (int i = 0; i < 10; i++)
    	{
    		v1.push_back(i);
    		v2.push_back(i + 5);
    	}
    
    	vector<int>TargetV;
    	//给目标容器开辟空间
    	//最特殊情况 两个容器没有交集 取两个容器中大的size作为目标容器开辟空间
    	TargetV.resize(max(v1.size(), v2.size()));
    
    	vector<int>::iterator itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), TargetV.begin());
    	
    	cout << "v2和v1的差集:" << endl;
    	set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), TargetV.begin());
    	for_each(TargetV.begin(), itEnd, myPrint);
    	cout << endl;
    
    	cout << "v1和v2的差集:" << endl;
    	set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), TargetV.begin());
    	for_each(TargetV.begin(), itEnd, myPrint);
    	cout << endl;
    }
    
    int main()
    {
    	test01();
    	cout << "------------------------" << endl;
    	//test02();
    	//cout << "------------------------" << endl << endl;
    	//test03();
    
    	//**************************************
    	system("pause");
    	return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    在这里插入图片描述

  • 相关阅读:
    做了五年功能测试麻木了,现在想进阶自动化测试该从哪里开始?
    Spring声明式事务注解源码剖析
    面试经典 150 题 3 —(双指针)— 167. 两数之和 II - 输入有序数组
    JavaScript | Hello World?【三】
    fastadmin插件 shopro 商城支付配置
    CTFd-Web题目动态flag
    六、Clion和STM32CubeMx---OLED(附案例工程)
    SLAM实现模块及功能
    HTTPS加密过程详解
    支持中文繁体,支持同时配置并启用飞书和Lark认证,JumpServer堡垒机v3.10.8 LTS版本发布
  • 原文地址:https://blog.csdn.net/m0_48808835/article/details/132811266