深入实践C++模板编程
2020-04-16 11:29:18 0 举报
AI智能生成
深入实践C++模板编程
作者其他创作
大纲/内容
第三部分 模板编程高级技巧
10 专用名词——概念
10.1 模板的先天不足
10.2 “概念”的提案及ConceptGCC编译器
10.3 概念语法
10.3.1 定义概念
10.3.2 用概念约束模板参数
10.3.3 概念映射
10.4 概念模拟库
10.4.1 概念检查宏
10.4.2 自定义概念检查
10.4.3 概念典型
10.5 本章小结
11 代码膨胀
11.1 源代码的增加
11.1.1 代理类的困境
11.1.2 D语言的方法
11.2 目标代码的增加
11.2.1 目标代码膨胀的成因
11.2.2 目标代码膨胀实例
11.2.3 改进代码
11.2.4 测试改进效果
11.3 本章小结
12 常用模板编程技巧
12.1 标签与特性
12.1.1 特性类模板numeric_limits
12.1.2 实例:矩阵与向量乘法
12.2 编译期多态
12.2.1 全覆盖的函数模板
12.2.2 虚函数的启发
12.2.3 虚基类模板
12.3 策略
12.3.1 策略的产生:再说vector的不足
12.3.2 为vector添加存储策略
12.4 伪变长参数模板
12.4.1 hetero_node的启发
12.4.2 编译期递归
12.4.3 访问元组中的数据
12.5 本章小结
13 元编程
13.1 C++中的元编程
13.2 元函数
13.2.1 元函数的实现
13.2.2 元函数的调用
13.3 元容器与元算法
13.3.1 元容器的实现
13.3.2 实例:容纳5种类型的元容器
13.4 类型过滤
13.4.1 类型过滤元函数的实现
13.4.2 实例:应用元容器与元算法
13.5 本章小结
第四部分 模板与C++11
14 右值引用
14.1 右值引用的产生
14.1.1 函数的匿名返回值
14.1.2 返回值优化
14.2 右值引用基本概念
14.2.1 左值与非左值
14.2.2 右值与右值引用
14.2.3 移动构造与移动赋值
14.2.4 狭义与广义的右值
14.2.5 左值强制转义成右值引用
14.2.6 右值引用变量是左值
14.3 引用声明符消去规则
14.3.1 完美转发
14.3.2 实例:智能的min函数
14.4 移动与异常
14.4.1 迁移数据的风险
14.4.2 关键字noexcept
14.4.3 转义函数模板
14.4.4 移动的效率问题
14.5 本章小结
15 模板新语法
15.1 变长参数模板
15.1.1 参数包
15.1.2 参数包的内容
15.1.3 参数包的展开模式
15.1.4 遍历参数包的内容
15.1.5 轻松实现元组
15.2 扩展的类型推导机制
15.2.1 自动类型变量
15.2.2 提取表达式结果类型
15.2.3 函数后置返回类型
15.3 其他模板新特性
15.3.1 外部模板实例
15.3.2 模板别名
15.3.3 连续的右尖括号
15.4 本章小结
16 C++11新特性集锦
16.1 λ表达式
16.1.1 λ表达式语法
16.1.2 变量捕获
16.2 初值列表新用法
16.2.1 构造变量
16.2.2 初值封装类模板
16.3 标准容器与算法的变化
16.3.1 对应右值引用
16.3.2 对应变长参数模板
16.3.3 对应初值列表
16.4 标准元组类模板
16.5 智能指针
16.5.1 独占指针unique_ptr
16.5.2 共享指针shared_ptr与weak_ptr
16.6 基于范围的for循环
16.7 拾遗
16.8 本章小结
第一部分 模板基础
1 Hello模板
1.1 为什么需要模板
1.2 初识函数模板
1.2.1 函数模板的实现
1.2.2 如何使用函数模板
1.2.3 模板参数自动推导
1.2.4 模板参数默认值
1.2.5 模板函数的静态变量
1.3 如何处理函数模板中的函数体
1.3.1 HPP文件还是CPP文件
1.3.2 链接器如何识别重复模板实例
1.4 尴尬的Export Template
1.4.1 什么是外名模板
1.4.2 C++编译器对外名模板的处理
1.5 本章小结
2 类亦模板
2.1 类型无关的数据结构
2.2 实践——栈类模板
2.2.1 栈类模板实例
2.2.2 栈类模板衍生子类模板实例
2.3 突破——异质链表
2.4 构造元组
2.4.1 通过嵌套实现元组
2.4.2 用类实现元组
2.5 类模板的用法
2.5.1 成员函数模板
2.5.2 友元函数模板
2.6 类模板的静态成员
2.7 本章小结
3 模板参数类型详解
3.1 整数模板参数
3.2 函数指针模板参数
3.3 指针及引用模板参数
3.4 成员函数指针模板参数
3.5 模板型模板参数
3.6 本章小结
4 凡事总有“特例”
4.1 从vector<bool>说起
4.2 特例的多种写法
4.3 特例匹配规则
4.4 函数模板的特例与重载
4.4.1 分辨重载
4.4.2 编译期的条件判断逻辑
4.5 本章小结
第二部分 标准库中的模板
5 容器、迭代器与算法
5.1 容器的定义
5.2 容器的实现
5.2.1 Java的实现方法
5.2.2 C++的实现方法
5.3 容器与迭代器
5.3.1 链表容器与迭代器
5.3.2 集合容器与迭代器
5.4 迭代器与算法
5.4.1 求容器中元素之和
5.4.2 实例:微型算法库
5.5 容器与迭代器的分类
5.6 容器与算法的关系
5.7 迭代器的陷阱
5.8 本章小结
6 标准库中的容器
6.1 容器的分类及基本要求
6.2 序列型容器
6.2.1 变长数组vector
6.2.2 双向链表list
6.2.3 双端序列deque
6.3 容器转换器
6.3.1 栈stack与队列queue
6.3.2 优先队列priority_queue
6.4 关联型容器
6.4.1 基本数据结构
6.4.2 内嵌类型定义
6.4.3 构造关联型容器
6.4.4 插入数据
6.4.5 数据的删除、查找与访问
6.4.6 整数值专用集合bitset
6.5 散列表容器
6.5.1 基本数据结构
6.5.2 散列函数
6.5.3 桶
6.6 其他C++11新容器
6.6.1 定长数组array
6.6.2 单向链表forward_list
6.7 本章小结
7 隐形的助手——分配器
7.1 分配器的基本要求
7.2 交换容器内容时的特殊处理
7.3 有态分配器与无态分配器
7.4 实践:池分配器
7.4.1 池分配器模板类的设计
7.4.2 对象池的实现
7.4.3 定位构造
7.4.4 池分配器的实现
7.4.5 测试池分配器
7.4.6 实际运行
7.5 本章小结
8 标准库中的迭代器
8.1 迭代器分类
8.1.1 输入迭代器
8.1.2 前向迭代器
8.1.3 双向迭代器与跳转迭代器
8.1.4 输出迭代器
8.2 迭代器属性类模板
8.3 迭代器转换器
8.3.1 反转迭代器
8.3.2 插入迭代器
8.4 流迭代器
8.5 本章小结
9 标准库中的算法
9.1 算法的共同特征
9.2 标准库中的常用算法
9.2.1 foreach的三种写法
9.2.2 搜索
9.2.3 计数与比较
9.2.4 复制、交换、替换与删除
9.2.5 排序
9.2.6 二分搜索
9.2.7 集合运算
9.2.8 二叉堆操作
9.2.9 其他算法
9.3 预设函数对象
9.3.1 函数对象基类
9.3.2 运算函数对象
9.3.3 参数绑定
9.4 实践:矩阵操作中如何消除循环语句
9.4.1 跨跃迭代器
9.4.2 矩阵类模板
9.4.3 累计迭代器
9.4.4 矩阵乘法
9.4.5 矩阵LU分解
9.4.6 组合迭代器
9.4.7 没有循环语句的矩阵乘法
9.5 本章小结
0 条评论
下一页