C++常用集合算法

set_intersection //求两个容器的交集
set_union //求两个容器的并集
set_difference //求两个容器的差集

(1)set _intersection
求交集,求交集的两个集合必须有序,目标容器开辟空间需要从两个容器中去最小值,set_intersection返回值即是交集中最后一个元素的位置
函数原型:
set_intersection(iterator beg1,iterator end1,iterator beg2,iteraotr end2,iterator dest);
示例:

void myPrint(int val){
	cout<<val<<"   ";
}

void test01(){
   vector<int>v1;
   vector<int>v2; 
   
   for(int i=0;i<10;i++){
   	v1.push_back(i);   //0-9
   	v2.push_back(i+5) ;  //5-14
   }
   
   vector<int>vTarget;
   //目标容器提前开辟空间,最特殊情况选择最小容器大小值 
   vTarget.resize(min(v1.size(),v2.size()));
   
   //获取交集,返回目标容器迭代器的最后一个位置 
   vector<int>::iterator itEnd = set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin()); 
   
   //输出交集容器的值 
   for_each(vTarget.begin(),itEnd,myPrint);
   cout<<endl;
}

输出样式:
在这里插入图片描述

(2)set_union
求并集,两个容器集合必须是有序集合。最特殊情况下开辟内存空间为两个容器集合相加,返回的也是最后一个元素位置的迭代器
函数原型:
set_union(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
示例:

 vector<int>vTarget;
   //目标容器提前开辟空间,最特殊情况选择最小容器大小值 
   vTarget.resize(max(v1.size(),v2.size()));
   
   //获取交集,返回目标容器迭代器的最后一个位置 
   vector<int>::iterator itEnd = set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),vTarget.begin()); 

输出样式:
在这里插入图片描述

(3)set_difference
求差集
函数原型:
set_difference(iterator beg1,iterator end1,iterator beg2,iterator end2,iterator dest);
//俩个集合必须有序,
示例:

 void test01(){
   vector<int>v1;
   vector<int>v2; 
   
   for(int i=0;i<10;i++){
   	v1.push_back(i);   //0-9
   	v2.push_back(i+5) ;  //5-14
   }
   
   vector<int>vTarget;
   //目标容器提前开辟空间,最特殊情况选择两个容器的容器中的最大值 
   vTarget.resize(max(v1.size(),v2.size()));
   
   cout<<"v1和v2的差集为: "; 
   //获取交集,返回目标容器迭代器的最后一个位置 
   vector<int>::iterator itEnd = set_difference(v1.begin(),
        v1.end(),v2.begin(),v2.end(),vTarget.begin()); 
         
   //输出交集容器的值 
   for_each(vTarget.begin(),itEnd,myPrint);
   cout<<endl;
   
   cout<<"v2和v1的差集为:";
   //获取交集,返回目标容器迭代器的最后一个位置 
   itEnd = set_difference(v2.begin(),
        v2.end(),v1.begin(),v1.end(),vTarget.begin()); 
         
   //输出交集容器的值 
   for_each(vTarget.begin(),itEnd,myPrint);
   cout<<endl;
}

输出样式:
在这里插入图片描述

发布了31 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/souhanben5159/article/details/104079627