内容简介
第1章 C++基础
1.1 组成C++程序的元素
1.1.1 #include指令
1.1.2 using语句
1.1.3 main函数
1.2 处理“闪烁的控制台一闪而过”
1.3 使用Microsoft Visual Studio
1.4 使用C++执行更多的操作
1.5 添加简单的变量声明
1.6 介绍C++控制结构
1.6.1 使用“if”,做判断
1.6.2 使用“while”,循环
1.7 C++程序的一般结构
1.8 关于命名空间的更多内容
1.9 关于注释的一些解释
1.9.1 C++注释(行注释)
1.9.2 C语言风格的注释
1.10 示例应用程序:加法机
练习
1.11 示例应用程序:计算phi
练习
第2章 数据
2.1 声明简单变量
2.2 基本数据类型
2.2.1 整数类型:准则
2.2.2 浮点类型:准则
2.3 符号名(符号)
2.4 字面量
2.5 混合数值类型
2.5.1 整数与浮点数
2.5.2 布尔型与整型
2.5.3 有符号整数与无符号整数
2.6 字符串和字符字面量
2.6.1 单引号字符
2.6.2 双引号字符串
2.6.3 特殊字符(转义序列)
2.6.4 宽字符串
2.6.5 原始字符串字面量(C++11)
2.7 数据声明:完整的语法
2.8 枚举类型
2.9 特殊声明(typedef、 auto、 decltype)
2.9.1 typedef关键字
2.9.2 auto和decltype关键字(C++11)
2.10 示例应用程序:类型提升
练习
第3章 运算符
3.1 优先级、结合性及左值
3.1.1 优先级
3.1.2 结合性
3.1.3 左值
3.2 运算符的简明概述
3.3 运算符的详细信息
3.3.1 范围运算符
3.3.2 数据访问及其他高优先级的运算符
3.3.3 前缀运算符
3.3.4 指向成员的指针运算符
3.3.5 乘法和除法
3.3.6 加法和减法
3.3.7 移位运算符
3.3.8 小于和大于
3.3.9 测试相等
3.3.10 位运算和逻辑连词
3.3.11 条件运算符
3.3.12 赋值运算符
3.3.13 throw运算符
3.3.14 连接运算符
3.4 善恶之争:后缀或前缀
3.5 位运算符的详细信息
3.5.1 按位与、或、异或
3.5.2 对有符号数和无符号数的操作
3.5.3 按位移位
3.6 类型转换运算符
3.6.1 static cast运算符
3.6.2 reinterpret cast运算符
3.6.3 const cast运算符
3.6.4 dynamic_ cast运算符
3.6.5 C语言的类型转换
3.7 示例应用程序:打印输出二进制基数
练习
第4章 控制结构
4.1 C++语句的简明概述
4.2 空语句和表达式语句
4.3 复合语句
4.4 if和if-else语句
4.5 while和do-while语句
4.6 for语句
4.7 基于范围的for语句(C++11)
4.8 switch语句
4.9 跳转语句(break、 continue、 goto)
4.10 异常处理(try、catch)
4.10.1 什么是异常
4.10.2 try-catch代码块:常规语法
4.10.3 catch块和异常对象
4.10.4 抛出一个异常
4.11 示例应用程序:猜数字游戏
练习
4.12 示例应用程序:计算机猜数字
练习
第5章 函数
5.1 传统的(命名)函数概述
5.1.1 函数原型与定义
5.1.2 原型化一个函数(简化的语法)
5.1.3 定义函数
5.1.4 调用函数
5.2 局部和全局变量
5.3 完整的函数声明语法
5.4 函数重载
5.5 带有默认值的参数
5.6 可变长度参数列表
5.7 lambda函数或匿名函数(C++11)
5.7.1 lambda函数的基本语法
5.7.2 lambda函数的闭包语法
5.7.3 mutable关键字
5.7.4 将lambda表达式与 STL连用
5.7.5 存储和返回lambda函数
5.8 constexpr函数(C++11)
5.9 示例应用程序:骰子的概率
练习
第6章 指针、数组和引用
6.1 引用
6.1.1 引用参数
6.1.2 从函数中返回一个引用
6.1.3 用“const”修饰的引用
6.2 数组
6.2.1 简单的(一维)数组
6.2.2 数组处理与循环
6.2.3 向函数传递数组
6.2.4 多维数组
6.3 指针
6.3.1 指针的概念
6.3.2 将指针作为参数
6.3.3 用于访问数组的指针
6.3.4 指针运算
6.3.5 指针与数组参数
6.3.6 指针和内存分配
6.3.7 指向const类型的指针
6.3.8 对指针本身应用const
6.3.9 void指针(void)
6.4 涉及指针的复合声明
6.5 传递和返回函数指针
6.6 智能指针(C++11)
6.6.1 shared_ptr模板
6.6.2 unique_ptr模板
6.7 示例应用程序:埃拉托色尼筛
练习
第7章 类与对象
7.1 概述:结构、联合和类
7.2 基本的类声明语法
7.2.1 声明和使用一个类
7.2.2 数据成员访问(公有、私有、保护)
7.2.3 定义成员函数
7.2.4 调用成员函数
7.2.5 私有成员函数
7.2.6 包含类的类
7.2.7 静态成员
7.3 构造函数
7.3.1 默认构造函数
7.3.2 重载的构造函数和转换函数
7.3.3 复制构造函数
7.3.4 构造函数初始化列表
7.3.5 委托构造函数(C++11)
7.3.6 默认成员初始化(C++11)
7.4 析构函数
7.5 隐藏的this指针
7.6 运算符函数(运算符重载)
7.6.1 将运算符函数作为成员
7.6.2 作为友元的运算符函数
7.6.3 赋值运算符
7.6.4 函数调用运算符
7.6.5 下标运算符
7.6.6 递增运算符和递减运算符
7.6.7 传入和传出转换函数
7.7 派生类(子类化)
7.7.1 子类语法
7.7.2 基类访问说明
7.7.3 继承的构造函数(C++11)
7.7.4 向上强制类型转换:子对象和基类指针
7.7.5 虚函数和重载
7.7.6 纯虚函数
7.7.7 override关键字(C++11)
7.7.8 解决层次结构中的名字冲突
7.8 位字段
7.9 联合
7.9.1 命名联合
7.9.2 匿名联合
7.10 示例应用程序:打包的布尔
演习
第8章 预处理器指令
8.1 预处理器指令的常规语法
8.2 预处理器指令小结
8.3 使用指令来解决具体问题
8.3.1 用#define创建有意义的符号
8.3.2 用#define创建宏
8.3.3 条件编译(#if、#endif等)
8.4 预处理器运算符
8.5 预定义宏
8.6 创建项目头文件
第9章 创建和使用模板
9.1 模板:语法和概述
9.2 函数模板
9.2.1 单参数的函数模板
9.2.2 处理类型歧义
9.2.3 有两个参数的函数模板
9.3 类模板
9.3.1 简单的类模板
9.3.2 实例化类模板
9.4 类模板与成员函数
9.4.1 类模板与内联成员函数
9.4.2 具有独立函数定义的类模板
9.5 使用整型模板参数
9.6 模板专门化
9.7 可变参数模板(C++11)
9.7.1 更复杂的可变模板
9.7.2 可变参数模板规则概述
9.7.3 元组
9.8 示例应用程序:类型提升
练习
第10章 C-字符串库函数
10.1 C-字符串格式概述
10.2 使用C-字符串输入和输出
10.3 C-字符串函数
10.4 用strtok对字符串标记化
10.5 单字符函数
10.6 内存块函数(memcpy等)
10.7 宽字符函数(wstrcpy等)
第11章 C I/O库函数
11.1 C I/O库概述
11.2 控制台I/O函数
11.3 打印/扫描格式
11.3.1 printf格式说明符(%)
11.3.2 高级printf格式的语法
11.3.3 将格式说明符与scanf函数配合使用
11.4 输入和输出字符串
11.5 文件I/O
11.5.1 打开文件
11.5.2 关闭文件
11.5.3 读取和写入文本文件
11.5.4 读写二进制文件
11.5.5 随机访问函数
11.5.6 其他文件管理函数
第12章 数学、时间和其他库函数
12.1 三角函数
12.2 其他数学函数
12.3 C语言的日期和时间库
12.3.1 日期和时间函数
12.3.2 TM (“Time”)数据结构
12.3.3 日期/时间格式说明符(strftime)
12.4 从字符串到数字的转换
12.5 内存分配函数
12.6 标准C随机函数
12.7 查找和排序函数
12.7.1 bsearch函数(二分查找)
12.7.2 qsort函数(快速排序)
12.7.3 使用C字符串的比较函数
12.8 其他标准C库函数
12.9 示例应用程序:智障学者
练习
第13章 C++的I/O流类
13.1 C++的I/O流的基础知识
13.1.1 用“<<”写入输出
13.1.2 用“>>”读取输入
13.2 利用getline读取输入行
13.3 C++流类的层次结构
13.4 流对象:控制符及标志
13.4.1 流控制符
13.4.2 流格式标志
13.5 流成员函数(通用)
13.5.1 输入流函数
13.5.2 输出流函数
13.5.3 标记设置流函数
13.6 文件流操作
13.6.1 概述:文本与二进制文件I/O
13.6.2 创建一个文件对象
13.6.3 文件的特定成员函数
13.6.4 读写二进制模式
13.6.5 随机存取操作
13.7 读取和写入字符串流
13.8 为你的类重载移位运算符
13.9 示例应用程序:文本文件阅读器
练习
第14章 C++ STL string类
14.1 string类概述
14.2 string类的构造函数
14.3 字符串类运算符
14.3.1 字符串赋值
14.3.2 字符串连接
14.3.3 字符串比较
14.3.4 字符串索引
14.4 成员函数概述
14.5 成员函数详解
14.6 string类的迭代器
14.6.1 标准(正向)迭代器
14.6.2 反向迭代器
14.6.3 迭代算法
14.6.4 使用迭代器的成员函数
14.7 宽字符串类(basic_string)
第15章 STL(向量,双端队列)简介
15.1 容器模板简介
15.2 介绍迭代器
15.3 向量模板
15.3.1 向量迭代器
15.3.2 向量构造函数
15.3.3 列表初始化(C++11)
15.3.4 向量函数简明摘要
15.3.5 向量成员函数详解
15.4 双端队列模板
15.4.1 双端队列迭代器
15.4.2 双端队列构造函数
15.4.3 双端队列函数简介
15.4.4 双端队列函数详解
15.5 位集合模板
15.5.1 位集合构造函数
15.5.2 位集合成员函数
15.6 示例应用程序:字母文本文件管理
练习
第16章 STL序列容器(List)
16.1 排序元素(严格弱序)
16.2 列表模板
16.2.1 列表迭代器
16.2.2 列表构造函数
16.2.3 列表函数简明摘要
16.2.4 列表成员函数详解
16.3 栈模板
16.4 队列模板
16.5 优先队列模板
16.5.1 优先队列构造函数
16.5.2 优先队列成员函数
16.6 示例应用程序:找出中位数
演习
第17章 STL关联容器(map、set)
17.1 pair模板
17.2 映射模板
17.2.1 填充映射
17.2.2 查找现有映射的元素
17.2.3 一个更复杂的记录类型
17.2.4 遍历映射
17.2.5 映射实现:二叉树
17.2.6 映射构造函数
17.2.7 映射函数简明摘要
17.2.8 映射成员函数详解
17.3 集合模板
17.3.1 填充集合
17.3.2 查找集合中的一个元素
17.3.3 集合构造函数
17.3.4 集合函数简明摘要
17.3.5 集合成员函数详解
17.4 多重映射模板
17.5 多重集合模板
17.6 无序容器(C++11)
17.6.1 无序容器:基本概念
17.6.2 调优散列表的性能
17.6.3 编写你自己的散列和相等函数
17.7 示例应用程序:猜单词游戏
练习
第18章 STL算法
18.1 STL算法:基本概念
18.2 使用lambda函数(C++11)
18.3 算法和迭代器
18.4 插入迭代器
18.5 示例应用程序:寻找中位数
18.6 算法简明摘要
18.6.1 只读算法
18.6.2 修改算法
18.6.3 排序和重新排序算法
18.6.4 堆算法
18.6.5 数值算法
18.6.6 预定义的函数对象
18.7 算法详解
第19章 C++11的随机化库
19.1 随机化中的问题
19.1.1 有偏差的分布问题
19.1.2 伪随机序列的问题
19.1.3 获取种子的问题
19.2 一个更好的随机化方案
19.3 常见的引擎
19.4 常用的分布
19.5 对引擎的操作
19.6 对分布的操作
19.7 示例应用程序:骰子游戏
练习
第20章 C++11的正则表达式库
20.1 C++11的正则表达式概述
20.2 处理转义序列(\)
20.3 构造一个正则表达式字符串
20.3.1 匹配字符
20.3.2 模式修饰符
20.3.3 重复组
20.3.4 字符类
20.4 匹配和查找函数
20.5 “查找全部”或迭代查找
20.6 替换文本
20.7 字符串标记化
20.8 捕获正则表达式异常
20.9 示例应用程序:RPN计算器
练习
附录A对右值引用(C++11)的轻松介绍
A.1复制的麻烦
A.2移动语义:C++11来救援
A.3在用户的String类中的右值引用
A.4验证运行时性能的提高
A.5右值和包含的对象
A.6引用:右值和左值再思考
附录B C++11新功能概述
B.1对象结构改进
B.2其他核心语言增强功能
B.3其他新关键字
B.4标准库的扩展
附录C ASCII码