第1章 C++泛型技术基础——模板 1
1.1 泛型与模板 1
1.1.1 泛型的基本概念 1
1.1.2 C++模板及其定义 3
1.1.3 几点说明和小结 7
1.2 关于模板参数 10
1.2.1 模板参数的种类 10
1.2.2 模板形参和实参的结合 14
1.3 特化模板和模板具现规则 16
1.3.1 特化(特例化)模板 16
1.3.2 模板的具现 19
1.4 右值引用与模板 22
1.4.1 右值引用 22
1.4.2 右值引用的应用1——转移语义 25
1.4.3 右值引用应用2——转移函数move() 30
1.4.4 右值引用应用3——参数完美转发模板 31
第2章 C++泛型机制的基石——数据类型表 39
2.1 类模板的公有数据类型成员 39
2.1.1 类的数据类型成员 39
2.1.2 再谈typedef 41
2.2 内嵌式数据类型表及数据类型衍生 42
2.3 数据类型表 44
2.3.1 数据类型表的概念 44
2.3.2 数据类型表的应用 47
2.4 特化数据类型表 51
2.5 STL中的Traits表 54
第3章 STL及其使用的其他C++技术 61
3.1 初识STL 61
3.1.1 STL是C++标准库中的模板类库 61
3.1.2 STL应用程序示例 61
3.2 STL常用的C++技术 65
3.2.1 运算符重载 66
3.2.2 函数对象(仿函数) 72
3.2.3 lambda表达式 74
3.3 智能指针 80
3.3.1 智能指针的基本原理 81
3.3.2 C++11支持的智能指针 86
第4章 模拟STL三大件 90
4.1 容器 90
4.1.1 向量vector的仿真MyVector 90
4.1.2 列表list的仿真MyList 95
4.2 迭代器 101
4.2.1 使用裸指针作为迭代器 102
4.2.2 迭代器是指针的类封装 105
4.2.3 迭代器的代码隔离作用 112
4.2.4 STL迭代器的种类 115
4.2.5 迭代器的种类标记 116
4.2.6 STL对迭代器的管理 122
4.3 通用算法 125
第5章 容器及其应用 134
5.1 向量vector 134
5.2 列表list 141
5.3 双向队列deque 144
5.4 STL关联式容器 148
5.5 map容器 152
5.5.1 map容器的定义 152
5.5.2 map的数据插入 156
5.5.3 map容器的其他常用成员方法 160
5.5.4 multimap容器 164
5.6 set容器 165
5.7 hash表基础及hash容器 167
5.7.1 hash表基础 167
5.7.2 hash容器 168
第6章 通用算法 171
6.1 通用算法的参数 171
6.1.1 算法的迭代器参数 171
6.1.2 辅助参数 179
6.1.3 谓词参数 180
6.2 算法时间复杂度 188
6.3 常用通用算法 189
6.3.1 查找和搜索算法 189
6.3.2 变异算法 202
6.3.3 排序算法 226
6.3.4 算术算法与关系算法 241
6.3.5 排列组合与集合算法 252
第7章 适配器模式在STL基础部件上的应用 256
7.1 适配器 256
7.2 STL容器适配器 258
7.2.1 stack适配器 259
7.2.2 queue适配器 264
7.2.3 priority_queue适配器 265
7.3 迭代器适配器 275
7.3.1 插入迭代器 275
7.3.2 反向迭代器 280
7.3.3 IO流迭代器 284
7.4 函数对象适配器 291
7.4.1 函数对象的适配 291
7.4.2 函数对象配接器 294
第8章 STL容器内存空间配置器 302
8.1 内存空间配置器及其设计基础 302
8.1.1 什么是内存空间配置器 302
8.1.2 内存空间配置器设计基础 303
8.2 STL空间配置器接口 307
8.2.1 STL空间配置器接口及最简单的空间配置器 307
8.2.2 典型STL容器空间的配置 311
8.3 内存池的概念及应用 321
8.3.1 内存池的规划 321
8.3.2 内存池的设计 323
附录A 关于关键字explicit 338