دانلود کتاب C++程序设计: 基础、编程抽象与算法策略
by Eric S. Roberts
|
عنوان فارسی: برنامه نویسی ++ C: مبانی ، انتزاع برنامه نویسی و استراتژی های الگوریتم |
دانلود کتاب
جزییات کتاب
书签制作方法请找 [email protected]
完全免费
封面
书名
版权
前言
目录
第1章 C++概述
1.1 你的第一个C++程序
1.2 C++的历史
1.2.1 面向对象范型
1.2.2 C++的演化
1.3 编译过程
1.4 C++程序结构
1.4.1 注释
1.4.2 包含的库文件
1.4.3 函数原型
1.4.4 主程序
1.4.5 函数定义
1.5 变量
1.5.1 变量声明
1.5.2 命名规则
1.5.3 局部变量和全局变量
1.5.4 常量
1.6 数据类型
1.6.1 数据类型的概念
1.6.2 整数类型
1.6.3 浮点类型
1.6.4 布尔类型
1.6.5 字符
1.6.6 字符串
1.6.7 枚举类型
1.6.8 复合类型
1.7 表达式
1.7.1 优先级和结合律
1.7.2 表达式中的混合类型
1.7.3 整数除法和求余操作符
1.7.4 类型转换
1.7.5 赋值操作符
1.7.6 自增和自减操作符
1.7.7 布尔运算
1.8 语句
1.8.1 简单语句
1.8.2 块
1.8.3 if语句
1.8.4 switch语句
1.8.5 while语句
1.8.6 for语句
本章小结
复习题
习题
第2章 函数与库
2.1 函数概念
2.1.1 数学中的函数
2.1.2 编程中的函数
2.1.3 使用函数的优点
2.1.4 函数和算法
2.2 库
2.3 在C++中定义函数
2.3.1 函数原型
2.3.2 重载
2.3.3 默认形参数
2.4 函数调用机制
2.4.1 函数调用步骤
2.4.2 组合函数
2.4.3 追踪组合函数执行过程
2.5 引用参数
2.6 接口与实现
2.6.1 定义error库
2.6.2 导出数据类型
2.6.3 导出常量定义
2.7 接口设计原则
2.7.1 统一主题的重要性
2.7.2 简单性与信息隐藏原理
2.7.3 满足用户需求
2.7.4 通用工具的优势
2.7.5 库稳定性的价值
2.8 随机数库的设计
2.8.1 随机数与伪随机数
2.8.2 标准库中的伪随机数
2.8.3 选择正确的函数集
2.8.4 构建用户程序
2.8.5 随机数库的实现
2.8.6 初始化随机数种子
2.9 Stanford类库介绍
2.9.1 简单的输入和输出类库
2.9.2 Stanford类库中的图形处理程序
本章小结
复习题
习题
第3章 字符串类string
3.1 使用字符串作为抽象数据
3.2 字符串操作
3.2.1 操作符重载
3.2.2 从一个字符串中选取字符
3.2.3 字符串赋值
3.2.4 提取字符串中的子串
3.2.5 在一个字符串中进行搜索
3.2.6 循环遍历字符串中的所有字符
3.2.7 通过连接扩展字符串
3.3 <cctype>库
3.4 修改字符串中的内容
3.5 遗留的C风格字符串
3.6 编写字符串应用程序
3.6.1 回文识别
3.6.2 将英语翻译成儿童黑话
3.7 strlib.h库
本章小结
复习题
习题
第4章 流类
4.1 格式化输出
4.2 格式化输入
4.3 数据文件
4.3.1 使用文件流
4.3.2 单个字符的输入/输出
4.3.3 面向行的输入/输出
4.3.4 格式化输入/输出
4.3.5 字符串流
4.3.6 一个用于控制台输入的更鲁棒的策略
4.4 类层次
4.4.1 生物层次
4.4.2 流类层次
4.4.3 在流层次中选择正确的层次
4.5 simpio.h和filelib.h库
本章小结
复习题
习题
第5章 集合类
5.1 Vector类
5.1.1 指定Vector的基类型
5.1.2 声明Vector对象
5.1.3 Vector的操作
5.1.4 从Vector对象中选择元素
5.1.5 作为参数传递Vector对象
5.1.6 创建预先定义大小的Vector
5.1.7 Vector类的构造函数
5.1.8 Vector中的操作符
5.1.9 表示二维结构
5.1.10 Stanford类库中的Grid类
5.2 Stack类
5.2.1 Stack类结构
5.2.2 栈和小型计算器
5.3 Queue类
5.3.1 仿真和模型
5.3.2 排队模型
5.3.3 离散时间
5.3.4 仿真时间中的事件
5.3.5 实现仿真
5.4 Map类
5.4.1 Map类的结构
5.4.2 在一个应用中使用Map类
5.4.3 Map类作为关联数组
5.5 Set类
5.5.1 实现<cctype>库
5.5.2 创建单词列表
5.5.3 Stanford类库中的Lexicon类
5.6 在集合上进行迭代
5.6.1 迭代顺序
5.6.2 再论儿童黑话
5.6.3 计算单词的频率
本章小结
复习题
习题
第6章 类的设计
6.1 二维点的表示
6.1.1 将Point定义为结构类型
6.1.2 将Point定义为类
6.1.3 接口与实现的分离
6.2 操作符重载
6.2.1 重载插入操作符
6.2.2 判断两个点是否相等
6.2.3 为Direction类型增加操作符
6.3 有理数
6.3.1 定义新类的机制
6.3.2 采用用户的观点
6.3.3 确定Rational类的私有实例变量
6.3.4 为Rational类定义构造函数
6.3.5 为Rational类定义方法
6.3.6 实现Rational类
6.4 token扫描器类的设计
6.4.1 用户想从记号扫描器中得到什么
6.4.2 tokenscanner.h接口
6.4.3 实现TokenScanner类
6.5 将程序封装成类
本章小结
复习题
习题
第7章 递归简介
7.1 一个简单的递归例子
7.2 阶乘函数
7.2.1 fact的递归公式
7.2.2 追踪递归过程
7.2.3 递归的稳步跳跃
7.3 斐波那契函数
7.3.1 计算斐波那契数列项
7.3.2 在递归实现中获得自信
7.3.3 递归实现的效率
7.3.4 递归不应被指责
7.4 检测回文
7.5 二分查找算法
7.6 间接递归
7.7 递归地思考
7.7.1 保持全局的观点
7.7.2 避免常见的错误
本章小结
复习题
习题
第8章 递归策略
8.1 汉诺塔
8.1.1 问题框架
8.1.2 找到一种递归策略
8.1.3 验证这个策略
8.1.4 编码方案
8.1.5 跟踪递归过程
8.2 子集求和问题
8.2.1 寻找一个递归解决方案
8.2.2 包含/排除模式
8.3 字符排列
8.4 图的递归
8.4.1 一个来自计算机艺术的实例
8.4.2 分形
本章小结
复习题
习题
第9章 回溯算法
9.1 迷宫的递归回溯
9.1.1 右手法则
9.1.2 寻找一种递归方法
9.1.3 确定简单情况
9.1.4 对迷宫问题的解决算法进行编码
9.1.5 说服你自己那个方案可行
9.2 回溯与游戏
9.2.1 拿子游戏
9.2.2 一个通用的双人游戏程序
9.3 最小最大算法
9.3.1 游戏树
9.3.2 评价位置和走法
9.3.3 限制递归搜索的深度
9.3.4 实现最小最大算法
本章小结
复习题
习题
第10章 算法分析
10.1 排序问题
10.1.1 选择排序算法
10.1.2 性能的经验评估
10.1.3 分析选择排序算法的性能
10.2 时间复杂度
10.2.1 大O符号
10.2.2 大O的标准简化
10.2.3 选择排序算法的时间复杂度
10.2.4 从代码中降低时间复杂度
10.2.5 最坏情况以及平均情况下的复杂度
10.2.6 大O符号的正式定义
10.3 递归的终止
10.3.1 分治策略的作用
10.3.2 合并两个矢量
10.3.3 归并排序算法
10.3.4 归并排序的计算复杂度
10.3.5 比较N2与Nlog2N的性能
10.4 标准的算法复杂度类别
10.5 快速排序算法
10.5.1 划分矢量
10.5.2 快速排序算法的性能分析
10.6 数学归纳法
本章小结
复习题
习题
第11章 指针和数组
11.1 内存结构
11.1.1 位、字节和字
11.1.2 二进制和十六进制表示
11.1.3 表示其他数据类型
11.1.4 内存地址
11.1.5 为变量分配内存
11.2 指针
11.2.1 把地址当作数值
11.2.2 声明指针变量
11.2.3 基本的指针运算
11.2.4 指向结构和对象的指针
11.2.5 关键字this
11.2.6 特殊的指针NULL
11.2.7 指针和引用调用
11.3 数组
11.3.1 声明数组
11.3.2 数组元素的选择
11.3.3 数组的静态初始化
11.3.4 有效容量和分配容量
11.3.5 指针和数组的关系
11.4 指针运算
11.4.1 数组索引和内存地址
11.4.2 指针的自增自减运算
11.4.3 C风格字符串
11.4.4 指针运算和程序风格
本章小结
复习题
习题
第12章 动态内存管理
12.1 动态分配和堆
12.1.1 new操作符
12.1.2 动态数组
12.1.3 动态对象
12.2 链表
12.2.1 刚铎灯塔
12.2.2 链表内的迭代
12.2.3 递归和列表
12.3 释放内存
12.3.1 delete操作符
12.3.2 释放内存策略
12.3.3 析构函数
12.4 定义CharStack类
12.4.1 charstack.h接口
12.4.2 选择字符栈的表示
12.5 堆-栈图
12.6 单元测试
12.7 拷贝对象
12.7.1 深拷贝和浅拷贝
12.7.2 赋值和拷贝构造函数
12.8 关键字const的使用
12.8.1 常量定义
12.8.2 常量引用调用
12.8.3 const方法
12.9 CharStack类的效率
本章小结
复习题
习题
第13章 效率和表示
13.1 编辑文本的软件模式
13.2 设计简单的文本编辑器
13.2.1 编辑器命令
13.2.2 EditorBuffer类的公有接口
13.2.3 选择一种底层表示
13.2.4 编写编辑器应用代码
13.3 基于数组的类实现
13.3.1 定义私有数据结构
13.3.2 缓冲区操作的实现
13.3.3 基于数组的编辑器的时间复杂度
13.4 基于栈的类实现
13.4.1 定义私有数据结构
13.4.2 缓冲区操作的实现
13.4.3 时间复杂度的比较
13.5 基于列表的类实现
13.5.1 链表缓冲区的插入操作
13.5.2 链表缓冲区的删除操作
13.5.3 链表表示法中光标的移动
13.5.4 缓冲区实现的完善
13.5.5 基于链表的缓冲区的时间复杂度
13.5.6 双向链表
13.5.7 时空权衡
本章小结
复习题
习题
第14章 线性结构
14.1 模板
14.2 栈的实现
14.2.1 使用动态数组实现栈
14.2.2 使用链表实现栈
14.3 队列的实现
14.3.1 基于数组的队列实现
14.3.2 队列的链表表示
14.4 实现矢量类
14.5 集成原型和代码
本章小结
复习题
习题
第15章 映射
15.1 使用矢量实现映射
15.2 查找表
15.3 哈希
15.3.1 设计数据结构
15.3.2 为字符串定义哈希函数
15.3.3 实现哈希表
15.3.4 跟踪哈希表的实现
15.3.5 调整桶的数目
15.4 实现HashMap类
本章小结
复习题
习题
第16章 树
16.1 家谱
16.1.1 用来描述树的术语
16.1.2 树的递归特性
16.1.3 用C++语言表示家谱
16.2 二叉搜索树
16.2.1 使用二叉搜索树的动机
16.2.2 在二叉搜索树中寻找节点
16.2.3 在二叉搜索树中插入一个新节点
16.2.4 删除节点
16.2.5 树的遍历
16.3 平衡树
16.3.1 平衡树策略
16.3.2 可视化AVL算法
16.3.3 单旋转
16.3.4 双旋转
16.3.5 实现AVL算法
16.4 使用BST实现映射
16.5 偏序数
本章小结
复习题
习题
第17章 集合
17.1 集合作为一种数学抽象
17.1.1 隶属关系
17.1.2 集合运算
17.1.3 集合恒等式
17.2 集合接口的扩展
17.3 集合的实现策略
17.4 优化小整数的集合
17.4.1 特征向量
17.4.2 压缩的位数组
17.4.3 位操作符
17.4.4 实现特征向量
17.4.5 实现高级集合运算
17.4.6 模板特化
17.4.7 使用一种混合的实现
本章小结
复习题
习题
第18章 图
18.1 图的结构
18.1.1 有向图和无向图
18.1.2 路径和回路
18.1.3 连通性
18.2 表示策略
18.2.1 用邻接表表示连接关系
18.2.2 用邻接矩阵表示连接关系
18.2.3 用弧集合表示关系
18.3 一种低层的图抽象
18.4 图的遍历
18.4.1 深度优先搜索
18.4.2 广度优先搜索
18.5 定义图类
18.5.1 用类表示图、节点和弧
18.5.2 用参数化的类实现图
18.6 寻找最短路径
18.7 搜索网页的算法
18.7.1 谷歌的网页排名算法
18.7.2 网页排名算法的一个简例
本章小结
复习题
习题
第19章 继承
19.1 简单的继承
19.1.1 指定模板类中的类型
19.1.2 定义Employee类
19.1.3 C++中子类的局限性
19.2 图形对象的继承层次
19.2.1 调用父类的构造函数
19.2.2 将GObject类指针存储在矢量中
19.3 表达式的类层次
19.3.1 异常处理
19.3.2 表达式结构
19.3.3 表达式的递归定义
19.3.4 二义性
19.3.5 表达式树
19.3.6 exp.h接口
19.3.7 Expression子类的表示
19.3.8 表达式图解
19.3.9 方法的实现
19.4 解析表达式
19.4.1 语句解析和语法
19.4.2 考虑运算的优先级
19.4.3 递归下降语法分析器
19.5 多重继承
19.5.1 stream类库中的多重继承
19.5.2 在GObject继承层次中添加GFillable类
19.5.3 多重继承的危险性
本章小结
复习题
习题
第20章 迭代策略
20.1 使用迭代器
20.1.1 简单的迭代器例子
20.1.2 迭代器的层次结构
20.2 使用函数作为数据值
20.2.1 函数指针
20.2.2 简单的画图应用
20.2.3 声明函数指针
20.2.4 实现plot函数
20.2.5 映射函数
20.2.6 实现映射函数
20.2.7 回调函数的限制
20.3 用函数封装数据
20.3.1 使用对象模拟闭包
20.3.2 函数对象的简单例子
20.3.3 向映射函数传递函数对象
20.3.4 编写以函数作为参数的函数
20.4 STL算法库
20.5 C++的函数式编程
20.5.1 STL库<functional>的接口
20.5.2 比较函数
20.6 迭代器的实现
20.6.1 为矢量类实现迭代器
20.6.2 将指针作为迭代器
20.6.3 typedef关键字
20.6.4 为其他集合类实现迭代器
本章小结
复习题
习题
索引