STL算法-交集,并集,差集,对称差

#include <algorthm> //用STL的算法需要引用此头文件

#include <set>

#include <vector>

using namespace std;

set<int> one;

one.insert(11);

one.insert(22);

one.insert(33);

set<int> two;

two.insert(11);

two.insert(44);

two.insert(55);

vector<int> result;

result.resize( one.size() + two.size() );   //result是用来保存one和two的交,并,差集的.自然要保定它的大小.要能装得下one,two两者元素之和.

vector<int>:iterator retEndPos; //这是那些算法函数返回的结果

交集set_intersection

//该函数返回的结果是所以相同元素插入到result后,最后一个元素的迭代器

retEndPos = set_intersection( one.begin(), one.end(), two.begin(), two.end() ,result.begin());

result.resize( retEndPos - result.begin() ) ; //重新调整result的大小,使其大小刚好等于并集元素个数.

//此时result中的元素是11,one和two中只有11是共同元素嘛

并集set_union

retEndPos = set_union( one.begin(), one.end(), two.begin(), two.end() , result.begin());

result.resize( retEndPos - result.begin() ) ;

//此时result中的元素为11 22 33 44 55

差集set_difference

retEndPos = set_difference( one.begin(), one.end(), two.begin(), two.end() , result.begin());

result.resize( retEndPos - result.begin() ) ;  //此时result中元素为 22 33

retEndPos = set_difference( two.begin(), two.end(), one.begin(), one.end() , result.begin());  //one 与two的位置互换了

result.resize( retEndPos - result.begin() ) ; //此时result中元素为 44 55

对称差集set_symmetric_difference

retEndPos = set_symmetric_difference( one.begin(), one.end(), two.begin(), two.end() , result.begin());

result.resize( retEndPos - result.begin() ) ; //此时result中元素为 22 33 44 55