简介
set_intersection
//求两个容器的交集
set_union
//求两个容器的并集
set_difference
// 求两个容器的差集
set_interection
函数原型
set_intersection(iterator begin1,iterator end1,iterator begin2,iterator begin2, iterator dest);
begin1、end12、begin2、end2、分别表示两个容器的其实迭代器和终止迭代器
dest 目标容器的起始迭代器
返回目标容器的结束迭代器
void print(int val)
{
cout << val << " ";
}
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10;i++)
{
v1.push_back(i + 1);
v2.push_back(i + 5);
}
vector<int> vTarget;
vTarget.resize(min(v1.size(), v2.size())); //极端情况,v1,v2有包含关系
vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
for_each(vTarget.begin(),itEnd, print); // 5 6 7 8 9 10
}
set_union
简介
set_union(iterator begin1,iterator end1,iterator begin2,iterator end2,iterator dest);
求两个集合的并集
void print(int val)
{
cout << val << " ";
}
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10;i++)
{
v1.push_back(i + 1);
v2.push_back(i + 5);
}
vector<int> vTarget;
vTarget.resize(v1.size() + v2.size()); //极端情况,v1,v2中没有相同元素
vector<int>::iterator itEnd = set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
for_each(vTarget.begin(),itEnd, print); // 1 2 3 4 5 6 7 8 9 10 11 12 13 14
}
set_difference
函数原型
set_diffenence(iterator begin1,iterator end1,iterator begin2,iterator end2 iterator targe);
求两个容器的差集
注意:第一个容器与第二个容器的差集,和第二个容器与第一个容器的差集是不一样的
void print(int val)
{
cout << val << " ";
}
void test01()
{
vector<int> v1;
vector<int> v2;
for (int i = 0; i < 10; i++)
{
v1.push_back(i + 1);
v2.push_back(i + 5);
}
vector<int> vTarget;
vTarget.resize(max(v1.size(), v2.size())); //极端情况,v1,v2中没有相同元素
cout << "v1与v2的差集:" << endl;
vector<int>::iterator itEnd = set_difference(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin());
for_each(vTarget.begin(), itEnd, print); // 1 2 3 4
cout << endl;
cout << "v2和v1的差集:" << endl;
itEnd = set_difference(v2.begin(), v2.end(), v1.begin(), v1.end(), vTarget.begin());
for_each(vTarget.begin(), itEnd, print); //11 12 13 14
}
需要注意的是,在执行集合算法的时候,两个容器必须都是有序的。还有,这个算法会返回一个迭代器,需要将这个迭代器看做结束迭代器。因为resize后的结果往往比求交集后的容器要大。如果将目标容器的结束迭代器放到遍历算法里面,末尾会输出一串0。