随笔 - 322  文章 - 0  评论 - 4  阅读 - 77146

C++ //常用集合算法 //set_intersection //求俩个容器的交集 //set_union //求两个容器的并集 //set_difference //求两个容器的差集

复制代码
  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 }
复制代码

 

posted on   Bytezero!  阅读(175)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示