set并集和交集&宏定义&typedef
2018-02-04 22:11
169 查看
审核还没通过就更新: )
把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;
示例一
示例二
示例三
示例四
把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")); }
相关文章推荐
- typedef 与 set_new_handler的几种写法
- python List&Set&Dict交集、并集、差集
- 8-计算集合的并集(set)
- Python 集合set()添加删除、交集、并集、集合操作详解
- python set集合运算(交集,并集,差集,对称差集)
- ES6 使用数据类型Set求交集、并集、差集
- c++ set求差集,并集,交集
- Python 集合set添加删除、交集、并集、集合操作符号
- Set数据结构实现数组的交集、并集、差集
- Set(交集、并集、差集)
- javaSet集合的并集、差集、交集
- JAVA Set 交集,差集,并集
- python 集合 并集、交集 Series list set 转换的实例
- JAVA Set 交集,差集,并集
- Java中使用Set进行并集,差集,交集查找
- Java set集合 交集,并集,差集
- list set 求交集、差集、并集
- 使用List、Set等求交集和并集
- Java集合工具类(一)-泛型集合工具类,用于便捷快速的定义、操作集合。包含Set的交集、并集...
- python set集合运算(交集,并集,差集,对称差集)