Skip to content

C++ Primer 第5版 读书笔记和练习题答案

License

Notifications You must be signed in to change notification settings

liuzhaoze/cpp-primer-answer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C++ Primer 中文版:第 5 版 读书笔记/课后练习

注意:

  • 每节练习位于笔记末尾。
  • 编译时注意依赖。如果出现了链接错误,绝大多数情况是因为没有将自己编写的头文件对应的 .cpp 文件添加到编译命令中。参考练习 13.42
  • lib 中的类模板代码是在非模板代码基础上修改而来的,未经测试,且定义应该在头文件而非源文件中。

测试用例来自该网站

部分答案参考 Mooophy/Cpp-Primer

第 1 章 开始

第 2 章 变量和基本类型

  • 2.1 基本内置类型
    • 2.1.1 算术类型
    • 2.1.2 类型转换
    • 2.1.3 字面值常量
  • 2.2 变量
    • 2.2.1 变量定义
    • 2.2.2 变量声明与定义的关系
    • 2.2.3 标识符
    • 2.2.4 名字的作用域
  • 2.3 复合类型
    • 2.3.1 引用
    • 2.3.2 指针
    • 2.3.3 理解复合类型的声明
  • 2.4 const 限定符
    • 2.4.1 const 的引用
    • 2.4.2 指针和 const
    • 2.4.3 顶层 const
    • 2.4.4 constexpr 和常量表达式
  • 2.5 处理类型
    • 2.5.1 类型别名
    • 2.5.2 auto 类型说明符
    • 2.5.3 decltype 类型指示符
  • 2.6 自定义数据结构
    • 2.6.1 定义 Sales_data 类型
    • 2.6.2 使用 Sales_data 类
    • 2.6.3 编写自己的头文件

第 3 章 字符串、向量和数组

  • 3.1 命名空间的 using 声明
  • 3.2 标准库类型 string
    • 3.2.1 定义和初始化 string 对象
    • 3.2.2 string 对象上的操作
    • 3.2.3 处理 string 对象中的字符
  • 3.3 标准库类型 vector
    • 3.3.1 定义和初始化 vector 对象
    • 3.3.2 向 vector 对象中添加元素
    • 3.3.3 其他 vector 操作
  • 3.4 迭代器介绍
    • 3.4.1 使用迭代器
    • 3.4.2 迭代器运算
  • 3.5 数组
    • 3.5.1 定义和初始化内置数组
    • 3.5.2 访问数组元素
    • 3.5.3 指针和数组
    • 3.5.4 C 风格字符串
    • 3.5.5 与旧代码的接口
    • 3.6 多维数组

第 4 章 表达式

第 5 章 语句

第 6 章 函数

  • 6.1 函数基础
    • 6.1.1 局部对象
    • 6.1.2 函数声明
    • 6.1.3 分离式编译
  • 6.2 参数传递
    • 6.2.1 传值参数
    • 6.2.2 传引用参数
    • 6.2.3 const 形参和实参
    • 6.2.4 数组形参
    • 6.2.5 main:处理命令行选项
    • 6.2.6 含有可变形参的函数
  • 6.3 返回类型和 return 语句
    • 6.3.1 无返回值函数
    • 6.3.2 有返回值函数
    • 6.3.3 返回数组指针
  • 6.4 函数重载
    • 6.4.1 重载与作用域
  • 6.5 特殊用途语言特性
    • 6.5.1 默认实参
    • 6.5.2 内联函数和 constexpr 函数
    • 6.5.3 调试帮助
  • 6.6 函数匹配
    • 6.6.1 实参类型转换
  • 6.7 函数指针

第 7 章 类

  • 7.1 定义抽象数据类型
    • 7.1.1 设计 Sales_data 类
    • 7.1.2 定义改进的 Sales_data 类
    • 7.1.3 定义类相关的非成员函数
    • 7.1.4 构造函数
    • 7.1.5 拷贝、赋值和析构
  • 7.2 访问控制与封装
    • 7.2.1 友元
  • 7.3 类的其他特性
    • 7.3.1 类成员再探
    • 7.3.2 返回 *this 的成员函数
    • 7.3.3 类类型
    • 7.3.4 友元再探
  • 7.4 类的作用域
    • 7.4.1 名字查找与类的作用域
  • 7.5 构造函数再探
    • 7.5.1 构造函数初始值列表
    • 7.5.2 委托构造函数
    • 7.5.3 默认构造函数的作用
    • 7.5.4 隐式的类类型转换
    • 7.5.5 聚合类
    • 7.5.6 字面值常量类
  • 7.6 类的静态成员

第 8 章 IO库

  • 8.1 IO 类
    • 8.1.1 IO 类型无拷贝或赋值
    • 8.1.2 条件状态
    • 8.1.3 管理输出缓冲
  • 8.2 文件输入输出
    • 8.2.1 使用文件流对象
    • 8.2.2 文件模式
  • 8.3 string 流
    • 8.3.1 使用 istringstream
    • 8.3.2 使用 ostringstream

第 9 章 顺序容器

  • 9.1 顺序容器概述
  • 9.2 容器库概览
    • 9.2.1 迭代器
    • 9.2.2 容器类型成员
    • 9.2.3 begin 和 end 成员
    • 9.2.4 容器定义和初始化
    • 9.2.5 赋值和 swap
    • 9.2.6 容器大小操作
    • 9.2.7 关系运算符
  • 9.3 顺序容器操作
    • 9.3.1 向顺序容器添加元素
    • 9.3.2 访问元素
    • 9.3.3 删除元素
    • 9.3.4 特殊的 forward_list 操作
    • 9.3.5 改变容器大小
    • 9.3.6 容器操作可能使迭代器失效
  • 9.4 vector 对象是如何增长的
  • 9.5 额外的 string 操作
    • 9.5.1 构造 string 的其他方法
    • 9.5.2 改变 string 的其他方法
    • 9.5.3 string 搜索操作
    • 9.5.4 compare 函数
    • 9.5.5 数值转换
  • 9.6 容器适配器

第 10 章 泛型算法

  • 10.1 概述
  • 10.2 初识泛型算法
    • 10.2.1 只读算法
    • 10.2.2 写容器元素的算法
    • 10.2.3 重排容器元素的算法
  • 10.3 定制操作
    • 10.3.1 向算法传递函数
    • 10.3.2 lambda 表达式
    • 10.3.3 lambda 捕获和返回
    • 10.3.4 参数绑定
  • 10.4 再探迭代器
    • 10.4.1 插入迭代器
    • 10.4.2 iostream 迭代器
    • 10.4.3 反向迭代器
  • 10.5 泛型算法结构
    • 10.5.1 5 种迭代器
    • 10.5.2 算法形参模式
    • 10.5.3 算法命名规范
  • 10.6 特定容器算法

第 11 章 关联容器

第 12 章 动态内存

第 13 章 拷贝控制

第 14 章 重载运算与类型转换

第 15 章 面向对象程序设计

第 16 章 模板与泛型编程

  • 16.1 定义模板
    • 16.1.1 函数模板
    • 16.1.2 类模板
    • 16.1.3 模板参数
    • 16.1.4 成员模板
    • 16.1.5 控制实例化
    • 16.1.6 效率与灵活性
  • 16.2 模板实参推断
    • 16.2.1 类型转换与模板类型参数
    • 16.2.2 函数模板显式实参
    • 16.2.3 尾置返回类型和类型转换
    • 16.2.4 函数指针和实参推断
    • 16.2.5 模板实参推断和引用
    • 16.2.6 理解 std::move
    • 16.2.7 转发
  • 16.3 重载与模板
  • 16.4 可变参数模板
    • 16.4.1 编写可变参数函数模板
    • 16.4.2 包扩展
    • 16.4.3 转发参数包
  • 16.5 模板特例化

第 17 章 标准库特殊设施

  • 17.1 tuple 类型
    • 17.1.1 定义和初始化 tuple
    • 17.1.2 使用 tuple 返回多个值
  • 17.2 bitset 类型
    • 17.2.1 定义和初始化 bitset
    • 17.2.2 bitset 操作
  • 17.3 正则表达式
    • 17.3.1 使用正则表达式库
    • 17.3.2 匹配与 Regex 迭代器类型
    • 17.3.3 使用子表达式
    • 17.3.4 使用 regex_replace
  • 17.4 随机数
    • 17.4.1 随机数引擎和分布
    • 17.4.2 其他随机数分布
  • 17.5 IO 库再探
    • 17.5.1 格式化输入与输出
    • 17.5.2 未格式化的输入/输出操作
    • 17.5.3 流随机访问

第 18 章 用于大型程序的工具

  • 18.1 异常处理
    • 18.1.1 抛出异常
    • 18.1.2 捕获异常
    • 18.1.3 函数 try 语句块与构造函数
    • 18.1.4 异常类层次
  • 18.2 命名空间
    • 18.2.1 命名空间定义
    • 18.2.2 使用命名空间成员
    • 18.2.3 类、命名空间与作用域
    • 18.2.4 重载与命名空间
  • 18.3 多重继承与虚继承
    • 18.3.1 多重继承
    • 18.3.2 类型转换与多个基类
    • 18.3.3 多重继承下的类作用域
    • 18.3.4 虚继承
    • 18.3.5 构造函数与虚继承

第 19 章 特殊工具与技术

附录 A 标准库

待办事项

  • 为附录 A.2A.3 增加内容

License

Shield: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

CC BY-NC-SA 4.0

About

C++ Primer 第5版 读书笔记和练习题答案

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages