簡介
set_intersection
//求兩個(gè)容器的交集
set_union
//求兩個(gè)容器的并集
set_difference
// 求兩個(gè)容器的差集
set_interection
函數(shù)原型
set_intersection(iterator begin1,iterator end1,iterator begin2,iterator begin2, iterator dest);
begin1、end12认臊、begin2圃庭、end2、分別表示兩個(gè)容器的其實(shí)迭代器和終止迭代器
dest 目標(biāo)容器的起始迭代器
返回目標(biāo)容器的結(jié)束迭代器
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有包含關(guān)系
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);
求兩個(gè)集合的并集
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
函數(shù)原型
set_diffenence(iterator begin1,iterator end1,iterator begin2,iterator end2 iterator targe);
求兩個(gè)容器的差集
注意:第一個(gè)容器與第二個(gè)容器的差集,和第二個(gè)容器與第一個(gè)容器的差集是不一樣的
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
}
需要注意的是恕酸,在執(zhí)行集合算法的時(shí)候,兩個(gè)容器必須都是有序的胯陋。還有蕊温,這個(gè)算法會(huì)返回一個(gè)迭代器袱箱,需要將這個(gè)迭代器看做結(jié)束迭代器。因?yàn)閞esize后的結(jié)果往往比求交集后的容器要大义矛。如果將目標(biāo)容器的結(jié)束迭代器放到遍歷算法里面发笔,末尾會(huì)輸出一串0捡絮。