审核还没通过就更新: )
把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"));
}

set并集和交集宏定义typedef相关推荐

  1. MAKEWORD、HIWORD、LOWORD 宏定义

    MAKEWORD 宏定义 typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; t ...

  2. 枚举、宏定义enum /defint/typedef

    #pragma mark 分类,可快速搜索 #pragma mark 1 枚举创建 int enumOne() {     enum Season {spring=1,summer,autumn,wi ...

  3. typedef与宏定义区别

    typedef与宏定义区别 个人觉得这篇文章写得非常好,就转了.我转载的这篇文章的地址为http://i.mtime.com/ocgcyj/blog/5693781/. 陷阱一: 记住,typedef ...

  4. STM32的C语言重点知识(1.C语言数据类型+2.C语言宏定义+3.C语言typedef+4.C语言结构体+5.C语言枚举)

    1.C语言数据类型: 注:目的是看到stdint,如看到int8_t;uint16_t能够瞬间知道表示的是char,8字节:unsigned short,16字节. ST关键字意思是在老版本的引脚说明 ...

  5. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

  6. C语言宏定义使用技巧

    写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等.下面列举一些成熟软件中常用得宏定义...... 1,防止一个头文件被重复包含 #ifndef COMDEF_H ...

  7. C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针

    目录 预编译 值传递.指针传递.引用传递 数组 typedef 函数指针 预编译 预编译又叫预处理.预编译不是编译,而是编译前的处理.这个操作是在正式编译之前由系统自动完成的.#define 和 #i ...

  8. C 语言编程 — 宏定义与预处理器指令

    目录 文章目录 目录 前文列表 宏 预处理器 预处理器指令 预处理器指令示例 预处理器指令运算符 宏定义 简单宏定义 带参数的宏定义 符号吞噬问题 使用 do{}while(0) 结构 预定义的宏 常 ...

  9. c int最小值的宏_C语言宏定义的妙用!用完软硬件效率蹭蹭涨!

    1 概述 在工程规模较小,不是很复杂,与硬件结合紧密,要求移植性的时候,可采用宏定义简化编程,增强程序可读性. 当宏作为常量使用时,C程序员习惯在名字中只使用大写字母.但是并没有如何将用于其他目的的宏 ...

最新文章

  1. 跨域cookie传递
  2. extjs获取焦点和失去焦点_[NBA夏联]焦点单三连红,NBA夏季联赛同样精彩
  3. 对“js变量作用域的疑问”的解答
  4. 数组对象的filter方法
  5. 返回一个一维整数数组中最大子数组的和
  6. Python学习(十)Python 函数
  7. 电商海报模板|psd分层海报素材轻松教你凸显你的主体产品!
  8. oracle 10g的进程主要分为,Oracle10g 后台进程列表
  9. IBM携手MIT组建新实验室:人工智能将有像人一样的视听功能
  10. 说说你对工厂模式的理解
  11. linux下环境变量设置的问题
  12. 手机WAPI功能检测常见问题分析(系列连载二):证书鉴别功能
  13. python机器学习之特征选择(过滤法、嵌入法、包装法案例详解)
  14. 动手学深度学习(tensorflow)---学习笔记整理(五、过拟合和欠拟合相关问题篇)
  15. TCL电视禁止第三方安装软件?如何远程给安卓智能电视强制安装安卓所有软件?
  16. CF685B Kay and Snowflake
  17. 云计算机技术的运用,三分钟为你详细解析云计算技术与应用
  18. c语言达内月考试题,达内C培训第一次月考〔附答案〕.doc
  19. The client-side rendered virtual DOM tree is not matching server-rendered content
  20. 连续支付(周期扣款)功能开发及注意事项

热门文章

  1. RewriteCond判断QUERY_STRING为空的写法?Apache Rewrite解决问号匹配的写法
  2. 视频教程-Excel下拉菜单怎么做 Excel排序高手技巧视频教程-Office/WPS
  3. 鸿蒙手机的热度,首款预装鸿蒙OS手机华为Mate40 Pro 4G版入网!5G热度不在?
  4. java操作题36套
  5. python dashboard django_python终极篇 ---django 模板系统
  6. 希尔伯特空间科普,从冯纽曼说起
  7. springboot 配置文件加载顺序 与boboootStrap属性文件对比
  8. 【JS】jQuery+Ajax从放弃到知根知底,笔记
  9. CString和LPCSTR区别
  10. java 过滤sql特殊字符_防止特殊字符SQL注入实现方案