本文主要是介绍常用集合算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#include<iostream>
#include<string>
#include<vector>
using namespace std;
#include<algorithm>
#include<functional>
#include<ctime>
void myPrint(int val)
{
cout << val << " ";
}
//常用集合算法
//set_intersection
void test01()
{
vector<int>v1;
vector<int>v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
v2.push_back(i + 5);
}
vector<int>v;
//目标容器需要提前开辟空间
//最特殊的情况 取小容器的size
v.resize(min(v1.size(), v2.size()));
//获取交集
vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), v.begin());
for_each(v.begin(), itEnd, myPrint);
cout << endl;
}
//set_union
void test02()
{
vector<int>v1;
vector<int>v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
v2.push_back(i + 5);
}
vector<int>v;
//目标容器提前开辟空间
//最特殊的情况 两个容器没有交集,并集就是两个容器size相加
v.resize(v1.size() + v2.size());
vector<int>::iterator itEnd= set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v.begin());
for_each(v.begin(), itEnd, myPrint);
cout << endl;
}
//set_difference 差集
void test03()
{
vector<int>v1;
vector<int>v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
v2.push_back(i + 5);
}
//创建目标容器
vector<int>v;
//给目标容器开辟空间 去两个容器中打的size作为目标容器开辟的空间
v.resize(max(v1.size(), v2.size()));
cout << "v1和v2的差集为:" << endl;
vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(),v.begin());
for_each(v.begin(), itEnd, myPrint);
cout << endl;
cout << "v2和v1的差集为:" << endl;
vector<int>::iterator itEnd1 = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), v.begin());
for_each(v.begin(), itEnd1, myPrint);
cout << endl;
}
int main()
{
test03();
}
这篇关于常用集合算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!