大道至简: C++STL (标准模板库) 精解
作者:闫常友编著
出版时间:2015
内容简介
众所周知,C++是在C语言之上发展起来的编程语言。几十年的发展历程,C++支持多种编程规范(过程化,面向对象,泛型)。并且C++国际标准不断更新,不断进步,尤其是C++14于2014年8月18日公布。C++的使用领域众广,多用于系统开发,引擎开发,等领域,几十年来一直是最受广大用户喜爱的编程语言之一。C++的STL算法库对常用数据结构和常用算法进行了封装。STL提供的算法对于广大程序员而言是非常便捷的,避免了重复开发,提高效率。回顾几年来C++程序开发在国内的发展情况,对于STL的认识和掌握还存在一些差距。本书献给喜欢C++STL的朋友,当您看见这本书,您应该对C++STL已有了一定的了解,希望继续深造;或者您已经暗下决心来学习它。那么本书将是您最佳的选择。全书共分为十七个篇章及一个附录。第一章主要是介绍相关的基本概念和基础知识,简要介绍了书中后面会用到的一些模版类型。从第二章开始,直至第十七章,逐次介绍了字符串类模版,容器,算法库,迭代器(访问容器的接口),数值计算模版,输入输出类模版,异常处理类模版,通用工具类模版,语言支持类模版,检测类模版,国际化类模版,仿函数,配置器,原子操作类,线性控制类模版,正则表达式类模版。附录部分介绍了几乎所有的传统C库函数中的数学计算类函数,和数值转换类函数。这些函数原本属于C标准函数库所有,实际工作中使用频率较高,特在此附录,以飨广大爱好者使用。学习本书内容需要您已经有了一定的C/C++基础。按照章节的先后顺序,由浅入深地讲解C++STL应用开发技术。本书力求将STL涉及的问题,一一列出讲解,使初学者能够少走些弯路。
目录
目 录
前言
内容提要
第1章 预备知识及简介
1.1 基本概念
1.1.1 何谓“命名空间”
1.1.2 头文件
1.1.3 面向对象的程序设计
1.1.4 C++中的声明和定义
1.1.5 最简单的C++程序
1.1.6 指针
1.1.7 函数
1.1.8 文件
1.1.9 编译和链接
1.1.10 程序启动和终止
1.1.11 异常处理
1.1.12 预处理命令
1.1.13 宏
1.2 类模板定义
1.2.1 类模板实例化
1.2.2 类模板的成员函数
1.2.3 类模板的静态数据成员
1.3 成员模板
1.4 友元模板
1.5 函数模板
1.6 类模板的参数
1.7 STL简介
1.7.1 STL历史
1.7.2 STL组件
1.7.3 STL基本结构
1.7.4 STL编程概述
1.7.5 小结
1.8 小结
第2章 字符串类模板
2.1 字符串类库简述
2.2 字符的特点
2.3 字符串类模板(basic_string)
2.4 字符串通用操作
2.4.1 构造器和析构器
2.4.2 大小和容量
2.4.3 元素存取(访问)
2.4.4 字符串比较
2.4.5 字符串内容的修改和替换
2.4.6 字符串联接
2.4.7 字符串I/O操作
2.4.8 字符串查找
2.4.9 字符串对迭代器的支持
2.4.10 字符串对配置器的支持
2.5 小结
第3章 容器——对象储存器
3.1 容器概念
3.2 序列式容器
3.2.1 vector(向量)类模板
3.2.2 list(列表)类模板
3.2.3 deque(双端队列)类模板
3.3 关联式容器
3.3.1 set/multiset(集合)类模板
3.3.2 map/multimap(图)类模板
3.4 特殊容器用法
3.4.1 bitset(位集合)类模板
3.4.2 stack(栈)类模板
3.4.3 queue(队列)类模板
3.4.4 priority queues(优先队列)类模板
3.5 小结
第4章 STL算法
4.1 算法库简介
4.2 非修改性算法
4.2.1 for each()算法
4.2.2 元素计数算法
4.2.3 最小值和最大值算法
4.2.4 搜索算法
4.2.5 比较算法
4.3 修改性算法
4.3.1 复制
4.3.2 转换
4.3.3 互换
4.3.4 赋值
4.3.5 替换
4.3.6 逆转
4.3.7 旋转
4.3.8 排列
4.4 排序及相关操作算法
4.4.1 全部元素排序
4.4.2 局部排序
4.4.3 根据某个元素排序
4.4.4 堆(Heap)操作算法
4.4.5 容器合并、交集和差集算法
4.4.6 搜索算法
4.5 删除算法
4.6 小结
第5章 迭代器––访问容器的接口
5.1 迭代器及其特性
5.2 头文件
5.3 迭代器类型详述
5.3.1 输入型迭代器
5.3.2 输出型迭代器
5.3.3 前向型迭代器
5.3.4 双向型迭代器
5.3.5 随机访问型迭代器
5.3.6 vector迭代器的递增和递减
5.4 迭代器配接器
5.4.1 逆向型迭代器
5.4.2 插入型迭代器
5.4.3 流型迭代器
5.5 迭代器辅助函数
5.5.1 前进函数advance()
5.5.2 距离函数distance()
5.5.3 交换两个迭代器所指内容iter_swap()
5.6 小结
第6章 数值计算类模板
6.1 复数运算
6.1.1 一个复数运算例题
6.1.2 复数类成员函数
6.1.3 复数类运算符
6.1.4 复数类运算
6.1.5 复数的超越函数运算
6.2 数组(向量)运算
6.2.1 类valarray
6.2.2 数组子集类—类slice和类模板slice_array
6.2.3 类gslice和类模板gslice_array
6.2.4 类mask_array
6.2.5 类indirect_array
6.3 通用数值计算
6.3.1 求和算法(accumulate())
6.3.2 内积算法(inner_product())
6.3.3 部分和算法(partial_sum())
6.3.4 序列相邻差算法(adjacent_difference())
6.4 全局性数学函数
6.5 小结
第7章 输入输出类模板
7.1 IOStream简介
7.1.1 stream对象
7.1.2 stream类别
7.1.3 stream操作符
7.1.4 操控器
7.2 IOStream 基本类和标准IOStream对象
7.2.1 头文件
7.2.2 标准stream操作符
7.2.3 stream状态
7.2.4 标准输入和输出函数
7.3 格式化
7.3.1 格式标志
7.3.2 bool类型数据的格式控制
7.3.3 详解“字段宽度、填充字符和位置调整”
7.3.4 正记号与大写字符
7.3.5 数值进制
7.3.6 浮点数输出
7.3.7 一般性格式定义
7.4 类streambuffer介绍
7.4.1 流缓冲区
7.4.2 缓冲区迭代器
7.4.3 自定义缓冲区
7.5 基于字符串的流
7.5.1 streambuf类
7.5.2 类模板basic_istringstream
7.5.3 类模板basic_ostringstream
7.5.4 类模板basic_stringstream
7.6 基于文件的流
7.6.1 文件标识及其使用
7.6.2 随机访问
7.6.3 4个类模板
7.6.4 C库中的文件存取功能概述
7.7 小结
第8章 异常处理类模板
8.1 异常的概念和基本思想
8.1.1 异常的概念
8.1.2 异常的分类
8.1.3 异常的捕捉和处理
8.1.4 资源管理
8.1.5 异常和效率
8.1.6 异常的描述
8.1.7 未捕捉的异常
8.2 异常类及几个重要问题
8.2.1 类exception
8.2.2 调用abort()
8.2.3 堆栈解退
8.2.4 错误代码
8.2.5 异常的迷失
8.2.6 异常处理的局限性
8.3 处理异常详述
8.4 异常的特殊处理函数
8.5 小结
第9章 通用工具类模板(Utility)
9.1 通用工具库简介
9.1.1 相等比较
9.1.2 小于比较
9.1.3 复制构造
9.1.4 配置器要求
9.1.5 运算符
9.1.6 对组(pairs)
9.2 动态内存管理
9.2.1 默认配置器
9.2.2 raw storage iterator
9.2.3 temporary Buffers(临时缓冲区)
9.2.4 特定算法
9.2.5 C函数库中的内存管理函数
9.3 堆的内存分配
9.4 辅助功能
9.4.1 数值极限
9.4.2 较大较小值(最大最小值)
9.4.3 两值交换
9.4.4 辅助性比较
9.4.5 头文件cstdlib和cstddef简介
9.5 日期和时间
9.5.1 3个类型
9.5.2 结构体(tm)
9.5.3 相关时间函数
9.5.4 时间示例
9.6 模板类auto_ptr
9.6.1 auto_ptr类构造函数
9.6.2 类auto_ptr的成员及转换
9.6.3 使用类auto_ptr
9.7 小结
第10章 语言支持类模板
10.1 类型
10.2 执行属性
10.2.1 类模板numeric_limits及其成员
10.2.2 float_round_style和float_denorm_style
10.2.3 数值极限的特化
10.2.4 C库函数
10.2.5 应用举例
10.3 程序的启动和终止
10.4 动态内存管理
10.4.1 内存的分配和释放
10.4.2 内存分配错误