【C++】《Effective C++》第九章
杂项讨论
条款53:不要轻忽编译器的警告
请记住
- 严肃对待编译器发出的警告信息。努力在你的编译器的最高(最严苛)警告级别下争取"无任何警告"的容易。
- 不要过度依赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同,一旦移植到另一个编译器上,你原本的警告信息可能消失。
条款54:让自己熟悉包括TR1在内的标准程序库
请记住
- 这部分建议学习
C++
新标准(C++11
、14
等)。
条款55:让自己熟悉Boost
boost
库是一个优秀的,可移植的,开源的 C++
库,它是由 C++
标准委员会发起的,其中一些内容已经成为了下一代 C++
标准库的内容,在 C++
社区中影响甚大,是一个不折不扣的准标准库,它的功能十分强大,弥补了 C++
很多功能函数处理上的不足。
很多boost
中的库功能堪称对语言功能的扩展,其构造用尽精巧的手法,不要贸然的花费时间研读。boost
另外一面,比如Graph
这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品代码中多多利用。
有如下分类:
字符串和文本处理库
- Conversion库:对C++类型转换的增强,提供更强的类型安全转换、更高效的类型安全保护、进行范围检查的数值转换和词法转换。
- Format库:实现类似printf的格式化对象,可以把参数格式化到一个字符串,而且是完全类型安全的。
- IOStream库 :扩展C++标准库流处理,建立一个流处理框架。
- Lexical Cast库:用于字符串、整数、浮点数的字面转换。
- Regex库:正则表达式,已经被TR1所接受。
- Spirit库:基于EBNF范式的LL解析器框架
- String Algo库:一组与字符串相关的算法
- Tokenizer库:把字符串拆成一组记号的方法
- Wave库:使用spirit库开发的一个完全符合C/C++标准的预处理器
- Xpressive 库:无需编译即可使用的正则表达式库
容器库
- Array 库:对C语言风格的数组进行包装
- Bimap 库:双向映射结构库
- Circular Buffer 库:实现循环缓冲区的数据结构
- Disjoint Sets库 :实现不相交集的库
- Dynamic Bitset 库:支持运行时调整容器大小的位集合
- GIL 库:通用图像库
- Graph 库:处理图结构的库
- ICL 库:区间容器库,处理区间集合和映射
- Intrusive 库:侵入式容器和算法
- Multi-Array 库:多维容器
- Multi-Index 库:实现具有多个STL兼容索引的容器
- Pointer Container 库:容纳指针的容器
- Property Map 库:提供键/值映射的属性概念定义
- Property Tree 库:保存了多个属性值的树形数据结构
- Unordered 库:散列容器,相当于hash_xxx
- Variant 库:简单地说,就是持有string, vector等复杂类型的联合体
迭代器库
- GIL 库:通用图像库
- Graph 库:处理图结构的库
- Iterators 库:为创建新的迭代器提供框架
- Operators 库:允许用户在自己的类里仅定义少量的操作符,就可方便地自动生成其他操作符重载,而且保证正确的语义实现
- Tokenizer 库:把字符串拆成一组记号的方法
算法库
- Foreach库:容器遍历算法
- GIL库:通用图像库
- Graph库:处理图结构的库
- Min-Max库:可在同一次操作中同时得到最大值和最小值
- Range库:一组关于范围的概念和实用程序
- String Algo库:可在不使用正则表达式的情况下处理大多数字符串相关算法操作
- Utility库:小工具的集合
函数对象和高阶编程库
- Bind库:绑定器的泛化,已被收入TR1
- Function库:实现一个通用的回调机制,已被收入TR1
- Functional库:适配器的增强版本
- Functional/Factory库:用于实现静态和动态的工厂模式
- Functional/Forward库:用于接受任何类型的参数
- Functional/Hash库:实现了TR1中的散列函数
- Lambda库:Lambda表达式,即未命名函数
- Member Function库:是STL中mem_fun和mem_fun_ref的扩展
- Ref库:包装了对一个对象的引用,已被收入TR1
- Result Of库:用于确定一个调用表达式的返回类型,已被收入TR1
- Signals库:实现线程安全的观察者模式
- Signals2库:基于Signal的另一种实现
- Utility库:小工具的集合
- Phoenix库:实现在C++中的函数式编程。
泛型编程库
- Call Traits库:封装可能是最好的函数传参方式
- Concept Check库:用来检查是否符合某个概念
- Enable If库:允许模板函数或模板类在偏特化时仅针对某些特定类型有效
- Function Types库:提供对函数、函数指针、函数引用和成员指针等类型进行分类分解和合成的功能
- GIL库:通用图像库
- In Place Factory, Typed In Place Factory库:工厂模式的一种实现
- Operators库:允许用户在自己的类里仅定义少量的操作符,就可方便地自动生成其他操作符重载,而且保证正确的语义实现
- Property Map库:提供键值映射的属性概念定义
- Static Assert库:把断言的诊断时刻由运行期提前到编译期,让编译器检查可能发生的错误
- Type Traits库:在编译时确定类型是否具有某些特征
- TTI库:实现类型萃取的反射功能。
模板元编程
- Fusion库:提供基于tuple的编译期容器和算法
- MPL库:模板元编程框架
- Proto库:构建专用领域嵌入式语言
- Static Assert库:把断言的诊断时刻由运行期提前到编译期,让编译器检查可能发生的错误
- Type Traits库:在编译时确定类型是否具有某些特征预处理元编程库
- Preprocessors库:提供预处理元编程工具
并发编程库
- Asio库:基于操作系统提供的异步机制,采用前摄设计模式实现了可移植的异步IO操作
- Interprocess库:实现了可移植的进程间通信功能,包括共享内存、内存映射文件、信号量、文件锁、消息队列等
- MPI库:用于高性能的分布式并行开发
- Thread库:为C++增加线程处理能力,支持Windows和POSIX线程
- Context库:提供了在单个线程上的协同式多任务处理的支持。该库可以用于实现用户级的多任务处理的机制,比如说协程coroutines,用户级协作线程或者类似于C#语言中yield关键字的实现。
- Atomic库:实现C++11样式的atomic<>,提供原子数据类型的支持和对这些原子类型的原子操作的支持。
- Coroutine库:实现对协程的支持。协程与线程的不同之处在于,协程是基于合作式多任务的,而多线程是基于抢先式多任务的。
- Lockfree库:提供对无锁数据结构的支持。
数学和数字库
- Accumulators库:用于增量计算的累加器的框架
- Integer库:提供一组有关整数处理的类
- Interval库:处理区间概念的数学问题
- Math库:数学领域的模板类和算法
- Math Common Factor库:用于支持最大公约数和最小公倍数
- Math Octonion库 :用于支持八元数
- Math Quaternion库:用于支持四元数
- Math/Special Functions库:数学上一些常用的函数
- Math/Statistical Distributions库:用于单变量统计分布操作
- Multi-Array库:多维容器
- Numeric Conversion库:用于安全数字转换的一组函数
- Operators库:允许用户在自己的类里仅定义少量的操作符,就可方便地自动生成其他操作符重载,而且保证正确的语义实现
- Random库:专注于伪随机数的实现,有多种算法可以产生高质量的伪随机数
- Rational库:实现了没有精度损失的有理数
- uBLAS库:用于线性代数领域的数学库
- Geometry库:用于解决几何问题的概念、原语和算法。
- Ratio库:根据C++ 0x标准N2661号建议,实现编译期的分数操作。
- Multiprecision库:提供比C++内置的整数、分数和浮点数精度更高的多精度数值运算功能。
- Odeint库:用于求解常微分方程的初值问题。
排错和测试库
- Concept Check库 :用来检查是否符合某个概念
- Static Assert库 :把断言的诊断时刻由运行期提前到编译期,让编译器检查可能发生的错误
- Test库:提供了一个用于单元测试的基于命令行界面的测试套件
数据结构库
- Any库:支持对任意类型的值进行类型安全的存取
- Bimap库:双向映射结构库
- Compressed Pair库:优化的对pair对象的存储
- Fusion库:提供基于tuple的编译期容器和算法
- ICL库:区间容器库,处理区间集合和映射
- Multi-Index库:为底层的容器提供多个索引
- Pointer Container库:容纳指针的容器
- Property Tree库:保存了多个属性值的树形数据结构
- Tuple库:元组,已被TR1接受
- Uuid库:用于表示和生成UUID
- Variant库:有类别的泛型联合类
- Heap库:对std::priority_queue扩展,实现优先级队列。
- Type Erasure: 实现运行时的多态。
图像处理库
- GIL库:通用图像库
输入输出库
- Assign库:用简洁的语法实现对STL容器赋值或者初始化
- Format库:实现类似printf的格式化对象,可以把参数格式化到一个字符串,而且是完全类型安全的
- IO State Savers库:用来保存流的当前状态,自动恢复流的状态等
- IOStreams库:扩展C++标准库流处理,建立一个流处理框架
- Program Options库:提供强大的命令行参数处理功能
- Serialization库:实现C++数据结构的持久化
跨语言混合编程库
- Python库:用于实现Python和C++对象的无缝接口和混合编程
内存管理库
- Pool库:基于简单分隔存储思想实现了一个快速、紧凑的内存池库
- Smart Ptr库:智能指针
- Utility库:小工具的集合
解析库
- Spirit库:基于EBNF范式的LL解析器框架
编程接口库
- Function库:实现一个通用的回调机制,已被收入TR1
- Parameter库:提供使用参数名来指定函数参数的机制
综合类库
- Compressed Pair库:优化的对pair对象的存储
- CRC库:实现了循环冗余校验码功能
- Date Time 库:一个非常全面灵活的日期时间库
- Exception库:针对标准库中异常类的缺陷进行强化,提供<<操作符重载,可以向异常传入任意数据
- Filesystem库:可移植的文件系统操作库,可以跨平台操作目录、文件,已被TR2接受
- Flyweight 库:实现享元模式,享元对象不可修改,只能赋值
- Lexical Cast 库:用于字符串、整数、浮点数的字面转换
- Meta State Machine库:用于表示UML2有限状态机的库
- Numeric Conversion 库:用于安全数字转换的一组函数
- Optional 库:使用容器的语义,包装了可能产生无效值的对象,实现了未初始化的概念
- Polygon 库:处理平面多边形的一些算法
- Program Options库:提供强大的命令行参数处理功能
- Scope Exit库:使用preprocessor库的预处理技术实现在退出作用域时资源自动释放
- Statechart库:提供有限自动状态机框架
- Swap库:为交换两个变量的值提供便捷方法
- System库:使用轻量级的对象封装操作系统底层的错误代码和错误信息,已被TR2接受
- Timer库:提供简易的度量时间和进度显示功能,可以用于性能测试等需要计时的任务
- Tribool库:三态布尔逻辑值,在true和false之外引入indeterminate不确定状态
- ypeof库:模拟C++0x新增加的typeof和auto关键字,以减轻变量类型声明的工作,简化代码
- Units库:实现了物理学的量纲处理
- Utility库:小工具集合
- Value Initialized库:用于保证变量在声明时被正确初始化
- Chrono库:实现了C++ 0x标准中N2661号建议所支持的时间功能。
- Log库:实现日志功能。
- Predef库:提供一批统一兼容探测其他宏的预定义宏。
编译器问题的变通方案库
- Compatibility库:为不符合标准库要求的环境提供帮助
- Config库:将程序的编译配置分解为三个部分:平台、编译器和标准库,帮助库开发者解决特定平台特定编译器的兼容问题
【C++】《Effective C++》第九章的更多相关文章
- C++ Primer : 第九章 : vector变长、string的其他操作以及容器适配器
vector变长机制.string的其他构造方法,添加.替换和搜索操作,string比较和数值转换,最后是容器适配器. vector对象是如何增长的 vector和string类型提供了一些成员函数, ...
- C++ Primer 第九章 顺序容器
由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...
- C++Primer 第九章
//1.vector:可变大小数组.支持快速随机访问,在尾部之外的位置插入或删除元素可能很慢.注意点:不要在vector中存放bool类型,vector<bool>并不是一个容器,其实现方 ...
- C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题
顺序容器的添加.访问.删除操作以及forward_list的特殊操作,还有迭代器失效问题. 一.向容器添加元素 // array不支持这些操作 // forward_list有自己撰于的版本的inse ...
- C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap
顺序容器属于C++ STL的一部分,也是非常重要的一部分. 顺序容器包括: std::vector,包含在头文件<vector>中 std::string, 包含在头文件<strin ...
- C++ Primer第九章课后编程问题
1. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3V1Z2xlMjAxMA==/font/5a6L5L2T/fontsize/400/fill/I0J ...
- C++ Primer Plus学习:第九章
C++第九章:内存模型与名称空间 C++在内存中存储数据方面提供了多种选择.可直接选择保留在内存中的时间长度(存储持续性)以及程序哪一部分可以访问数据(作用域和链接)等. 单独编译 程序分为三个部分: ...
- 【C++】《C++ Primer 》第九章
第九章 顺序容器 一.顺序容器概述 顺序容器(sequential container):为程序员提供了控制元素存储和访问顺序的能力.这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应. 不同 ...
- 精通Web Analytics 2.0 (11) 第九章: 新兴分析—社交,移动和视频
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第九章: 新兴分析-社交,移动和视频 网络在过去几年中发生了不可思议的发展变化:从单向对话到双向对话的转变; 由视频,Ajax和 ...
- 第九章:四大组件之Broadcast Receiver
第九章:四大组件之Broadcast Receiver 一.广播的功能和特征 广播的生命周期很短,经过调用对象-->实现onReceive-->结束,整个过程就结束了.从实现的复杂度和 ...
随机推荐
- Mysql为什么使用b+树,而不是b树、AVL树或红黑树?
首先,我们应该考虑一个问题,数据库在磁盘中是怎样存储的?(答案写在下一篇文章中) b树.b+树.AVL树.红黑树的区别很大.虽然都可以提高搜索性能,但是作用方式不同. 通常文件和数据库都存储在磁盘,如 ...
- 使用MySQL乐观锁解决超卖问题
在秒杀系统设计中,超卖是一个经典.常见的问题,任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限,这是每个抢购活动都要面临的难点. 1 超卖问题描述 在多个用户同时发起对同一 ...
- C++异常之五 异常和继承
异常和继承 异常也是类,我们可以创建自己的异常类,在异常中可以使用(虚函数,派生,引用传递和数据成员等), 下面用一个自制的数组容器Vector,在对Vector初始化时来对Vector的元素个数进行 ...
- 从0到1实战移动Web App开发
从0到1实战移动Web App开发 教程介绍 从0到1 实战webapp,通过热门的web前端技术实现移动端app应用,先基础.后实战,在讲解的同时引导思考,会抛出自己独特的观点,一行一行写代码讲 ...
- vue第五单元(v-if和v-show以及v-for的灵活应用 watch以及computed的区别 (常见效果) #课程目标
第五单元(v-if和v-show以及v-for的灵活应用 watch以及computed的区别 (常见效果) #课程目标 精通 v-if v-else v-else-if 的使用 精通 v-show ...
- 移动端 canvas统计图
一.折线图 1. 获取画布画笔 2. 封装画线的方法 3. 画坐标轴 4. 循环数据画横轴 > 4.1 画刻度 > 4.2 刻度文字 > 4.3 画折线 > 4.4 画点 5. ...
- [日常摸鱼][poj2777]Count Color-线段树
辣鸡会考考完啦哈哈哈哈 题意:一块板分成$L$块,每次给一段连续的块染色或者询问一段有几种颜色,颜色的范围$\leq 30$ 我记得我好像做过一个类似的二维染色的问题-不过那个用树状数组直接过掉了- ...
- SQL注入练习第一天
MySQL 相关知识 在MySQL中,把[INFORMATION_SCHEMA] 看作是一个数据库,确切说是信息数据库.其中保存着关于MySQL服务器所维护的所有其他数据库的信息.如数据库名,数据库的 ...
- SQL注入基本知识点总结
SQL注入基本知识 information_schema MySQL 中存储所有数据库名.所有表名.所有字段名的系统数据库叫 information_schema ,这是在 MySQL 数据库初 ...
- SpringBoot2 整合OAuth2组件,模拟第三方授权访问
本文源码:GitHub·点这里 || GitEE·点这里 一.模式描述 授权服务 验证第三方服务的身份,验证邮箱用户的身份,记录和管理认证Token,为资源服务器提供Token校验.场景:第三方网站借 ...