STL set集合运算算法
#include<iostream>
#include<set>
#include<vector>
#include<list>
#include<algorithm>
#include<string>
#include<iterator>
using namespace std;
//set 与map几乎相同 只不过set没有键值之分 键与值相同 所以不允许修改元素的值
//STL提供与set相关的集合相关算法
//STL中的集合与数学的集合不同 STL中set不允许键值重复 并且有序
/*
因为必须有序 所以这四个函数 只能set与multi_set或者有序集合才可用
A B两个集合
set_union 求并集(A+B)
set_intersection 求交集(A^B)
set difference 求差集 (A-B)
set_symmetric_difference 求对称差集(A-B)U(B-A)
对称差可以从上边三个函数 得到
*/
int main(void)
{
string Str1 = "abcde";
string Str2 = "cdefgh";
set<char> MySet1(Str1.begin(), Str1.end());
set<char> MySet2(Str2.begin(),Str2.end());
typedef set<char>::iterator S_Ite;
S_Ite first1, first2, last1, last2;
first1 = MySet1.begin();
first2 = MySet2.begin();
last1 = MySet1.end();
last2 = MySet2.end();
//set_union(first1,last1,first2,last2,ostream_iterator<char>(cout," "));
//-----abcdefgh
//set_difference(first1, last1, first2, last2, ostream_iterator<char>(cout, " "));
//-----ab
//set_intersection(first1, last1, first2, last2, ostream_iterator<char>(cout, " "));
//------cde
//set_symmetric_difference(first1, last1, first2, last2, ostream_iterator<char>(cout, " "));
//abfgh
list<char> result(MySet1.size()+MySet2.size(),'#');
//将集合运算的结果可以存入vector或者链表中但是大小是不确定的 需要删除
list<char>::iterator ite = result.begin();
ite=set_union(first1,last1,first2,last2,ite);
//集合运算返回值 是输出迭代器的位置 因此可以直接删除 后序元素
result.erase(ite,result.end());
copy(result.begin(), result.end(), ostream_iterator<char>(cout, " "));
return 0;
}