审核还没通过就更新: )
把set_difference()这家伙给忘掉了
已补充
<———————————————–>
看紫书P116, 发现这里的代码出现了几个没看过的函数, 百度了一下, 还真有, 而且用法比较奇特.
紫书上使用宏(macro)很巧妙, 以前这样没用过
typedef也给我减少写代码提供了新思路
主角是set相关的函数
取两集合并集: set_union()
取两集合交集: set_intersection()
取第一集合对第二集合的差集:;set_difference()
要包含头文件algorithm
函数的参数分别是
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin());
以上, 把集合是s1, s2取并集, 放到集合s3中
还有一种直接输出, 可设置元素间字符的
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), ostream_iterator< int>(cout,”\n”));
要包含iterator头文件
set_intersection函数与set_difference函数用法和set_union几乎是一样的
值得注意的是
这样写参数比较繁琐, 所以不如使用宏定义简化使用函数过程中的参数
#define seT(x) x.begin(), x.end()
#define sEt(x) inserter(x, x.begin())
或者更集中
#define seT(x, y) x.begin(), x.end(), y.begin(), y.end()
使用typedef简化类型, 或者说使类型更常规
typedef set< int > Set;
示例一
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
typedef set<int> Set;
int main()
{
Set s1, s2, s3;
for(int i = 0; i < 10; ++i) {
s1.insert(i);
s2.insert(i + 4);
}
set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin()));
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin()));
Set::iterator it = s3.begin();
while(it != s3.end()) {
cout << *it << endl;
it++;
}
}
示例二
#include <iostream>
#include <iterator>
#include <algorithm>
#include <set>
using namespace std;
#define seT(x) x.begin(), x.end()
#define sEt(x) inserter(x, x.begin())
#define sET ostream_iterator<int>(cout, "\n")
typedef set <int> Set;
int main()
{
Set s1, s2, s3;
for( int i = 0; i < 10; ++i ) {
s1.insert(i);
s2.insert(i+7);
}
set_union(seT(s1), seT(s2), sEt(s3));
Set :: iterator it = s3.begin();
while(it != s3.end()) {
cout << *it << endl;
it++;
}
cout << endl;
set_intersection(seT(s1), seT(s2), sET);
}
示例三
#include <iostream>
#include <iterator>
#include <set>
#include <algorithm>
using namespace std;
#define seT(x, y) x.begin(), x.end(), y.begin(), y.end()
#define sET ostream_iterator<int>(cout, "\n")
typedef set<int> Set;
int main()
{
Set s1, s2;
for(int i = 0; i < 10; ++i) {
s1.insert(i-3);
s2.insert(i+2);
}
set_intersection(seT(s1, s2), sET);
}
示例四
#include <iostream>
#include <set>
#include <iterator>
#include <algorithm>
using namespace std;
#define SET(x) x.begin(), x.end()
int main()
{
typedef set<int> Set;
Set s1, s2, s3;
for( int i = 0; i < 10; ++ i ) {
s1.insert(i+1);
s2.insert(i+3);
}
set_difference(SET(s1), SET(s2), inserter(s3, s3.begin()));
set_difference(SET(s1), SET(s2), ostream_iterator<int>(cout, "\n"));
}