set_intersection(交集):
/*
set_intersection算法 求两个set集合的交集
注意:两个集合必须是有序序列
@param beg1 容器1开始迭代器
@param end1 容器1结束迭代器
@param beg2 容器2开始迭代器
@param end2 容器2结束迭代器
@param dest 目标容器开始迭代器
@return 目标容器的最后一个元素的迭代器地址
*/
代码如下:
vector<int> v;
vector<int> v2;
for (int i = 0; i < 10;i++)
{
v.push_back(i);
v2.push_back(i + 4);
}
vector<int> v3;
v3.resize(min(v.size(),v2.size())); //不能少,以最小的容器为基准
vector<int>::iterator pos = set_intersection(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin());
copy(v3.begin(), pos, ostream_iterator<int>(cout, " "));
set_union(并集):
/*
set_union算法 求两个set集合的并集
注意:两个集合必须是有序序列
@param beg1 容器1开始迭代器
@param end1 容器1结束迭代器
@param beg2 容器2开始迭代器
@param end2 容器2结束迭代器
@param dest 目标容器开始迭代器
@return 目标容器的最后一个元素的迭代器地址
*/
代码如下:
vector<int> v;
vector<int> v2;
for (int i = 0; i < 10;i++)
{
v.push_back(i);
v2.push_back(i + 4);
}
vector<int> v3;
v3.resize(v.size()+v2.size()); //不能少,两个总和
vector<int>::iterator pos = set_union(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin());
copy(v3.begin(), pos, ostream_iterator<int>(cout, " ")); //使用pos做最后一个地址,防止打印溢出
set_difference(差集):
/*
set_difference算法 求两个set集合的差集
注意:两个集合必须是有序序列
@param beg1 容器1开始迭代器
@param end1 容器1结束迭代器
@param beg2 容器2开始迭代器
@param end2 容器2结束迭代器
@param dest 目标容器开始迭代器
@return 目标容器的最后一个元素的迭代器地址
*/
代码如下:
vector<int> v;
vector<int> v2;
for (int i = 0; i < 10;i++)
{
v.push_back(i);
v2.push_back(i + 4);
}
vector<int> v3;
v3.resize(max(v.size(),v2.size())); //不能少,选最大的
vector<int>::iterator pos = set_difference(v.begin(), v.end(), v2.begin(), v2.end(), v3.begin());
copy(v3.begin(), pos, ostream_iterator<int>(cout, " ")); //选pos做最后的地址