Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

InternetofThingsprogrammer/cppPrimer

Open more actions menu
 
 

Repository files navigation

cppPrimer

C++Primer5 练习题

该仓库主要包含三部分

  1. 书中的示例程序,对应的源文件放在每一章节文件夹下的 examples 子文件夹中
  2. 书中的练习题,对应的源文件放在每一章节文件夹下的 exercises 子文件夹中
  3. 收集的一些好玩的 c++ 程序,对应的源文件放在 interesting_cpps 文件夹中

编译器信息

x86_64-w64-mingw32
gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

关于打印中文乱码问题

如果使用的是 windows 中文系统并且源文件编码格式是 utf-8,则程序在控制台打印中文的时候可能会乱码。这里有两种方法:

  • 将源文件编码改为和系统一样的 gbk 编码。
  • 在使用 g++ 编译的时候添加一个编译参数 -fexec-charset 来指定代码中字符串的编码,例如
    g++ -fexec-charset=gbk -o main .\main.cpp

如果不指定这个参数并且源文件是 utf-8 编码的话,由于控制台使用的是 gbk 编码,所以就导致打印的中文字符乱码。


第 1 章

开始

1.1 编写一个简单的 c++ 程序

  • 1.1.1 编写、运行程序

1.2 初识输入输出

1.3 注释简介

1.4 控制流

  • 1.4.1 while 语句
  • 1.4.2 for 语句
  • 1.4.3 读取数量不定的输入数据
  • 1.4.4 if 语句

1.5 类简介

  • 1.5.1 Sales_item 类
  • 1.5.2 初识成员函数

1.6 书店程序

小节

术语表


第 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.2.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 章

表达式

4.1 基础

  • 4.1.1 基本概念
  • 4.1.2 优先级与结合律
  • 4.1.3 求值顺序

4.2 算数运算符

4.3 逻辑和关系运算符

4.4 赋值运算符

4.5 递增和递减运算符

4.6 成员访问运算符

4.7 条件运算符

4.8 位运算符

4.9 sizeof 运算符

4.10 都好运算符

4.11 类型转换

  • 4.11.1 算数转换

  • 4.11.2 其它隐式类型转换

  • 4.11.3 显式转换

4.12 运算符优先级表

小节

术语表


第 5 章

语句

5.1 简单语句

5.2 语句作用域

5.3 条件语句

  • 5.3.1 if 语句

  • 5.3.2 switch 语句

5.4 迭代语句

  • 5.4.1 while 语句

  • 5.4.2 传统的 for 语句

  • 5.4.3 范围 for 语句

  • 5.4.4 do while 语句

5.5 跳转语句

  • 5.5.1 break 语句

  • 5.5.2 continue 语句

  • 5.5.3 goto 语句

5.6 try 语句块和异常处理

  • 5.6.1 throw 表达式

  • 5.6.2 try 语句块

  • 5.6.3 标准异常

小节

术语表


第 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.4 函数重载

  • 6.4.1 重载与作用域

6.5 特殊用途语言特性

  • 6.5.1 默认实参

  • 6.5.2 内联函数和 constexpr 函数

  • 6.5.3 调试帮助

6.6 函数匹配

  • 6.6.1 实参类型转换

小节

术语表


第 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 使用 ostringsstream

小节

术语表


第 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 构造 stirng 的其它方法

  • 9.5.2 改变 stirng 的其它方法

  • 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.5 泛型算法结构

  • 10.5.1 5 类迭代器

  • 10.5.2 算法形参模式

  • 10.5.3 算法命名规范

10.6 特定容器算法

小节

术语表


第 11 章

关联容器

11.1 使用关联容器

11.2 关联容器概述

  • 11.2.1 定义关联容器

  • 11.2.2 关键字类型的要求

  • 11.2.3 pair 类型

11.3 关联容器操作

  • 11.3.1 关联容器迭代器

  • 11.3.2 添加元素

  • 11.3.3 删除元素

  • 11.3.4 map 的下标操作

  • 11.3.5 访问元素

  • 11.3.6 一个单词转换的 map

11.4 无序容器


第 12 章

动态内存

12.1 动态内存与智能指针

  • 12.1.1 shared_ptr 类

  • 12.1.2 直接管理内存

  • 12.1.3 shared_ptr 和 new 结合使用

  • 12.1.4 智能指针和异常

  • 12.1.4 智能指针和异常

  • 12.1.5 unique_ptr

  • 12.1.6 weak_ptr

12.2 动态数组

  • 12.2.1 new 和数组

  • 12.2.2 allocator 类

12.3 使用标准库:文本查询程序

  • 12.3.1 文本查询程序设计

  • 12.3.2 文本查询程序类的定义

小节

术语表


第 13 章

拷贝控制

13.1 拷贝、赋值与销毁

  • 13.1.1 拷贝构造函数

  • 13.1.2 拷贝赋值运算符

  • 13.1.3 析构函数

  • 13.1.4 三/五法则

  • 13.1.5 使用 =default

  • 13.1.6 阻止拷贝

13.2 拷贝控制和资源管理

  • 13.2.1 行为像值的类

  • 13.2.2 定义行为像指针的类

13.3 交换操作

13.4 拷贝控制示例

13.5 动态内存管理类

13.6 对象移动

  • 13.6.1 右值引用

  • 13.6.2 移动构造函数和移动赋值运算符

  • 13.6.3 右值引用和成员函数

小节

术语表


第 14 章

重载运算与类型转换

14.1 基本概念

14.2 输入和输出运算符

  • 14.2.1 重载输出运算符 <<

  • 14.2.2 重载输入运算符 >>

14.3 算数和关系运算符

  • 14.3.1 相等运算符

  • 14.3.2 关系运算符

14.4 赋值运算符

14.5 下标运算符

14.6 递增和递减运算符

14.7 成员访问运算符

14.8 函数调用运算符

14.8.1 lambda 是函数对象

14.8.2 标准库定义的函数对象

14.8.3 可调用对象与 function

14.9 重载、类型转换与运算符

14.9.1 类型转换运算符

14.9.2 避免有二义性的类型转换

小节

术语表


第 15 章

面向对象程序设计

15.1 OOP:概述

15.2 定义基类和派生类

  • 15.2.1 定义基类

  • 15.2.2 定义派生类

  • 15.2.3 类型转换与继承

15.3 虚函数

15.4 抽象基类

15.5 访问控制与继承

15.6 继承中的类作用域

15.7 构造函数与拷贝控制

  • 15.7.1 虚析构函数

  • 15.7.2 合成拷贝控制与继承

  • 15.7.3 派生类的拷贝控制成员

  • 15.7.4 继承的构造函数

15.8 容器与继承

  • 15.8.1 编写 Basket 类

15.9 文本查询程序再探

  • 15.9.1 面向对象的解决方案

  • 15.9.2 Query_base 类和 Query 类

  • 15.9.3 派生类

  • 15.9.4 eval 函数

小节

术语表


第 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 匹配与 Regexp 迭代器类型

  • 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 noexpect 异常说明

  • 18.1.5 异常类层次

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 章

特殊工具与技术

19.1 控制内存分配

  • 19.1.1 重载 new 和 delete

  • 19.1.2 定位 new 表达式

19.2 运行时类型识别

  • 19.2.1 dynamic_cast 运算符

  • 19.2.2 typeid 运算符

  • 19.2.3 使用 RTTI

  • 19.2.4 type_info 类

19.3 枚举类型

19.4 类成员指针

  • 19.4.1 数据成员指针

  • 19.4.2 成员函数指针

  • 19.4.3 将成员函数用作可调用对象

19.5 嵌套类

19.6 union:一种节省空间的类

19.7 局部类

19.8 固有的不可移植的特性

  • 19.8.1 位域

  • 19.8.2 volatile 限定符

  • 19.8.3 链接指示:extern "C"

小节

术语表

About

C++Primer5 exercises

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 100.0%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.