第二章 时间与日期 1.timer库提供简易的度量时间与进度显示,用于计时。 2.timer库由两个组件构成,精度低的timer(V1)与基于chrono的高精度cpu_timer(V2)。 3.timer(V1)包含三个小组件:计时器timer、progress_timer和进度指示器progress_display (1)timer类,在创建对象时即开始计时,通过elapsed()来查看已经逝去的时间,elapsed_min()返回测量时间的最小精度,elapsed_max()返回能够测量时间的最大范围。 如果要以天、月、年为单位的时间需要用cpu_timer。 (2)progress_timer:计时器 (3)progress_display:在控制台上显示执行进度。 4.date_time库,全面灵活的日期时间库。可访问日期、日期运算、时间长度、时间操作等。 第三章 内存管理 5.smart_ptr库 可以在智能指针退出作用域时,不管是正常流程离开还是异常处理,总会自动调用delete来析构堆上动态分配的对象 6.6种智能指针 (1)scoped_ptr:一旦获得了对象的管理权,就无法再从它那里取回。不允许拷贝和赋值。P60,在支持C++11的编译器下,unique_ptr结合了scoped_ptr与scoped_array两者的能力,可用unique_ptr替代scoped_ptr。 (2)scoped_array:与scoped_ptr的唯一不同是动态数组,非单个对象。除非对性能有非常苛刻要求,或编译器不支持标准库,否则不建议使用。 (3)shared_ptr:与unique_ptr都可安全放到标准容器中,可自由的拷贝和赋值。支持比较运算,判断两个shared_ptr的相等或不等。P70 (4)shared_array:类似于shared_ptr的动态数组。多数情况下用shared_ptr (5)weak_ptr:一般用于协助shared_ptr,观测资源的使用情况。没有共享资源,它的构造不会引起指针计数的增加。共享但不拥有某个对象。P84 (6)intrusive_ptr:如果现存代码已有了引用计数机制管理的对象,那么它是个很好的选择。P89 7.pool库 最简单的内存池类,返回简单数据类型内存指针。左右类似于malloc[meloc]、new,优点是不必担心分配的内存释放问题。 第四章 实用工具 8.noncopyable:实现一个禁止拷贝的类 使用方法:class do_not_copy:boost::noncopyable //私有继承于noncopyabl 9.ignore_unused:关闭暂时用不到的变量与模板类型的警告信息。完全没有运行时的效率损耗。 template 使用方法:inline void ignore_unused(Ts const ...) 10.optional:检测函数返回值的有效性。 11.assign:用简洁的语法对标准容器赋值或初始化。 list_inserter:包含了容器的push_back、push_front,还具有repeat/range简化输入重复数据 operator+=:批量添加元素,元素间用,分隔。 operator():添加元素。 generic_list:在容器构造时完成赋值。 list_of:产生 generic_list对象,使用()和,填充元素。用于有序容器。 map_list_of:产生 generic_list对象,使用()和,填充元素。用于map容器。 pair_list_of:产生 generic_list对象,使用()和,填充元素。用于map容器。 tuple_list_of:产生 generic_list对象,使用()和,填充元素。用于tuple容器。 减少重复输入: repeat() repeat_fun() range() 12.swap:对标准库里std::swap的增强和泛化,交换两个变量或数组、三维的点的值。 13.singleton:即单件模式,这种模式的类在程序生命周期中只有一个实例。 14.tribool:三态的布尔逻辑,类似于bool,多一个indeterminate的不确定状态,其实际上是个函数指针类型。 15.operators提供了强大且自由的操作符重载能力。包括基本运算、复合运算、解引用、等价与相等....... 16.exception:异常处理机制,改变了传统的使用错误返回值处理机制,简化了函数的接口和调用代码,提供<<操作符重载,可以向异常传入任意数据。 17.uuid库:创建全球唯一标识符。 18.config:解决特定平台,特定编译器的兼容问题。 19.utility 第五章 字符串与文本处理 20.lexical_cast:进行字符串与整数、浮点数之间的字面转换。 21.format:格式化输出 22.string_ref:与std::string相比,只有字符串的引用,没有内存拷贝成本,因此运行效率高。 23.string_algo:与std::string相比,提供了大量的字符操作函数,如大小写无关比较、修建、特定模式的子串查找。 24.tokenizer:专门用于分词的字符串处理库,类似于.string_algo的分割迭代器。 25.xpressive:是一个强大的正则表达式库,正则表达式是处理文本强有力的工具,它使用一套复杂、完善的语法规则,能够解决文本处理领域的绝大多数问题,如正则查找、正则匹配、正则替换、正则迭代、正则分词等等。 提供静态和动态两种方式,静态类似与sprint,动态与boost.regex相似。 第六章 正确性与测试 26.assert:提供运行时的断言,用于代码的正确性测试。 27.static_assert:提供静态断言。 28.lightweight & test:提供了完整的单元测试框架。 第七章 容器和数据结构 29.容器类型: (1)array:与std::array差别很小,可互换。 (2)dynamic_bitset:融合了std::bitset与std::vector (3)unordered:无序的散列容器 (4)bimap:扩展了关联型容器,提供了双向映射的能力,符合标准容器规范。 (5)circular_buffer:实现了循环缓冲区的数据结构,支持标准容器操作(如push_back),但大小是固定的。 (6)tuple(元组):固定数目元素的容器,其中每个元素类型可以不相同。 (7)any:只能容纳一个元素,但可以使任意类型。 (8)variant:是union类型的扩展,union只支持基本类型,而variant没有限制,如string、vector (9)multi_array:STL风格的多维数组,比vector (10)property_tree:保存了多个属性值的树形数据结构,可以用类似路径的简单方式访问任意节点的属性。而且每个节点都可以用类似STL的风格遍历子节点。它适合于应用程序的配置数据处理,可以解析xml、ini、json、info四种格式的文本数据。 以上容器要求:析构函数不能抛出异常,个别容器需要具有缺省构造函数和拷贝构造函数。 第八章 算法 30.很实用的三个算法 (1)foreach:经典for循环的写法越显繁琐和冗余,foreach提供类似for的序列遍历能力。 BOOST_FOREACH(auto x, v) //)foreach遍历vector容器 { cout< (2)minmax、minmax_element (3)algorithm:是一个算法的集合。 (1)clamp:位于空间boost::algorithm,用来判断1个值是否夹在另一对值之间。 操作迭代器和容器的版本:clamp_range (2)hex和unhex:位于空间boost::algorithm,用来执行十六进制的编码和解码(ASCII)。 它们都有三种形式,分别支持迭代器对、数组、区间。 第九章 数学与数字 31.常用库 (1)math.constants库:提供了π、e、根号二等常用数字常数,支持float、double、long double精度,而且还支持自定义类型以获得更高精度。 (2)integer库:有关整数处理。 (1)*intege_traits:使数据类型相关特性的最大值、最小值函数,在编译期同样为常量。 |