# cpp-primer-answer **Repository Path**: jingxingqiang/cpp-primer-answer ## Basic Information - **Project Name**: cpp-primer-answer - **Description**: C++ Primer 第5版 读书笔记和练习题答案 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-06-12 - **Last Updated**: 2026-06-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # C++ Primer 中文版:第 5 版 读书笔记/课后练习 > 注意: > > * 每节练习位于笔记末尾。 > * 编译时注意依赖。如果出现了链接错误,绝大多数情况是因为没有将自己编写的头文件对应的 `.cpp` 文件添加到编译命令中。参考[练习 13.42](./Chapter13_%E6%8B%B7%E8%B4%9D%E6%8E%A7%E5%88%B6/src/quiz_13.42_main.cpp) 。 > * [lib](./lib/) 中的类模板代码是在非模板代码基础上修改而来的,未经测试,且定义应该在头文件而非源文件中。 测试用例来自[该网站](https://www.informit.com/store/c-plus-plus-primer-9780321714114)。 部分答案参考 [Mooophy/Cpp-Primer](https://github.com/Mooophy/Cpp-Primer) 。 ## 第 1 章 开始 ### 1.1 [编写一个简单的 C++ 程序](./Chapter1_%E5%BC%80%E5%A7%8B/note/note_1.1.md) ### 1.2 [初识输入输出](./Chapter1_%E5%BC%80%E5%A7%8B/note/note_1.2.md) ### 1.3 [注释简介](./Chapter1_%E5%BC%80%E5%A7%8B/note/note_1.3.md) ### 1.4 [控制流](./Chapter1_%E5%BC%80%E5%A7%8B/note/note_1.4.md) ### 1.5 [类简介](./Chapter1_%E5%BC%80%E5%A7%8B/note/note_1.5.md) ### 1.6 [书店程序](./Chapter1_%E5%BC%80%E5%A7%8B/note/note_1.6.md) ## 第 2 章 变量和基本类型 ### 2.1 [基本内置类型](./Chapter2_%E5%8F%98%E9%87%8F%E5%92%8C%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B/note/note_2.1.md) ### 2.2 [变量](./Chapter2_%E5%8F%98%E9%87%8F%E5%92%8C%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B/note/note_2.2.md) ### 2.3 [复合类型](./Chapter2_%E5%8F%98%E9%87%8F%E5%92%8C%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B/note/note_2.3.md) ### 2.4 [const 限定符](./Chapter2_%E5%8F%98%E9%87%8F%E5%92%8C%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B/note/note_2.4.md) ### 2.5 [处理类型](./Chapter2_%E5%8F%98%E9%87%8F%E5%92%8C%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B/note/note_2.5.md) ### 2.6 [自定义数据结构](./Chapter2_%E5%8F%98%E9%87%8F%E5%92%8C%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B/note/note_2.6.md) ## 第 3 章 字符串、向量和数组 ### 3.1 [命名空间的 using 声明](./Chapter3_%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E5%90%91%E9%87%8F%E5%92%8C%E6%95%B0%E7%BB%84/note/note_3.1.md) ### 3.2 [标准库类型 string](./Chapter3_%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E5%90%91%E9%87%8F%E5%92%8C%E6%95%B0%E7%BB%84/note/note_3.2.md) ### 3.3 [标准库类型 vector](./Chapter3_%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E5%90%91%E9%87%8F%E5%92%8C%E6%95%B0%E7%BB%84/note/note_3.3.md) ### 3.4 [迭代器介绍](./Chapter3_%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E5%90%91%E9%87%8F%E5%92%8C%E6%95%B0%E7%BB%84/note/note_3.4.md) ### 3.5 [数组](./Chapter3_%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E5%90%91%E9%87%8F%E5%92%8C%E6%95%B0%E7%BB%84/note/note_3.5.md) ### 3.6 [多维数组](./Chapter3_%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E5%90%91%E9%87%8F%E5%92%8C%E6%95%B0%E7%BB%84/note/note_3.6.md) ## 第 4 章 表达式 ### 4.1 [基础](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.1.md) ### 4.2 [算数运算符](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.2.md) ### 4.3 [逻辑和关系运算符](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.3.md) ### 4.4 [赋值运算符](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.4.md) ### 4.5 [递增和递减运算符](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.5.md) ### 4.6 [成员访问运算符](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.6.md) ### 4.7 [条件运算符](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.7.md) ### 4.8 [位运算符](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.8.md) ### 4.9 [sizeof 运算符](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.9.md) ### 4.10 [逗号运算符](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.10.md) ### 4.11 [类型转换](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.11.md) ### 4.12 [运算符优先级表](./Chapter4_%E8%A1%A8%E8%BE%BE%E5%BC%8F/note/note_4.12.md) ## 第 5 章 语句 ### 5.1 [简单语句](./Chapter5_%E8%AF%AD%E5%8F%A5/note/note_5.1.md) ### 5.2 [语句作用域](./Chapter5_%E8%AF%AD%E5%8F%A5/note/note_5.2.md) ### 5.3 [条件语句](./Chapter5_%E8%AF%AD%E5%8F%A5/note/note_5.3.md) ### 5.4 [迭代语句](./Chapter5_%E8%AF%AD%E5%8F%A5/note/note_5.4.md) ### 5.5 [跳转语句](./Chapter5_%E8%AF%AD%E5%8F%A5/note/note_5.5.md) ### 5.6 [try 语句块和异常处理](./Chapter5_%E8%AF%AD%E5%8F%A5/note/note_5.6.md) ## 第 6 章 函数 ### 6.1 [函数基础](./Chapter6_%E5%87%BD%E6%95%B0/note/note_6.1.md) ### 6.2 [参数传递](./Chapter6_%E5%87%BD%E6%95%B0/note/note_6.2.md) ### 6.3 [返回类型和 return 语句](./Chapter6_%E5%87%BD%E6%95%B0/note/note_6.3.md) ### 6.4 [函数重载](./Chapter6_%E5%87%BD%E6%95%B0/note/note_6.4.md) ### 6.5 [特殊用途语言特性](./Chapter6_%E5%87%BD%E6%95%B0/note/note_6.5.md) ### 6.6 [函数匹配](./Chapter6_%E5%87%BD%E6%95%B0/note/note_6.6.md) ### 6.7 [函数指针](./Chapter6_%E5%87%BD%E6%95%B0/note/note_6.7.md) ## 第 7 章 类 ### 7.1 [定义抽象数据类型](./Chapter7_%E7%B1%BB/note/note_7.1.md) ### 7.2 [访问控制与封装](./Chapter7_%E7%B1%BB/note/note_7.2.md) ### 7.3 [类的其他特性](./Chapter7_%E7%B1%BB/note/note_7.3.md) ### 7.4 [类的作用域](./Chapter7_%E7%B1%BB/note/note_7.4.md) ### 7.5 [构造函数再探](./Chapter7_%E7%B1%BB/note/note_7.5.md) ### 7.6 [类的静态成员](./Chapter7_%E7%B1%BB/note/note_7.6.md) ## 第 8 章 IO库 ### 8.1 [IO 类](./Chapter8_IO%E5%BA%93/note/note_8.1.md) ### 8.2 [文件输入输出](./Chapter8_IO%E5%BA%93/note/note_8.2.md) ### 8.3 [string 流](./Chapter8_IO%E5%BA%93/note/note_8.3.md) ## 第 9 章 顺序容器 ### 9.1 [顺序容器概述](./Chapter9_%E9%A1%BA%E5%BA%8F%E5%AE%B9%E5%99%A8/note/note_9.1.md) ### 9.2 [容器库概览](./Chapter9_%E9%A1%BA%E5%BA%8F%E5%AE%B9%E5%99%A8/note/note_9.2.md) ### 9.3 [顺序容器操作](./Chapter9_%E9%A1%BA%E5%BA%8F%E5%AE%B9%E5%99%A8/note/note_9.3.md) ### 9.4 [vector 对象是如何增长的](./Chapter9_%E9%A1%BA%E5%BA%8F%E5%AE%B9%E5%99%A8/note/note_9.4.md) ### 9.5 [额外的 string 操作](./Chapter9_%E9%A1%BA%E5%BA%8F%E5%AE%B9%E5%99%A8/note/note_9.5.md) ### 9.6 [容器适配器](./Chapter9_%E9%A1%BA%E5%BA%8F%E5%AE%B9%E5%99%A8/note/note_9.6.md) ## 第 10 章 泛型算法 ### 10.1 [概述](./Chapter10_%E6%B3%9B%E5%9E%8B%E7%AE%97%E6%B3%95/note/note_10.1.md) ### 10.2 [初识泛型算法](./Chapter10_%E6%B3%9B%E5%9E%8B%E7%AE%97%E6%B3%95/note/note_10.2.md) ### 10.3 [定制操作](./Chapter10_%E6%B3%9B%E5%9E%8B%E7%AE%97%E6%B3%95/note/note_10.3.md) ### 10.4 [再探迭代器](./Chapter10_%E6%B3%9B%E5%9E%8B%E7%AE%97%E6%B3%95/note/note_10.4.md) ### 10.5 [泛型算法结构](./Chapter10_%E6%B3%9B%E5%9E%8B%E7%AE%97%E6%B3%95/note/note_10.5.md) ### 10.6 [特定容器算法](./Chapter10_%E6%B3%9B%E5%9E%8B%E7%AE%97%E6%B3%95/note/note_10.6.md) ## 第 11 章 关联容器 ### 11.1 [使用关联容器](./Chapter11_%E5%85%B3%E8%81%94%E5%AE%B9%E5%99%A8/note/note_11.1.md) ### 11.2 [关联容器概述](./Chapter11_%E5%85%B3%E8%81%94%E5%AE%B9%E5%99%A8/note/note_11.2.md) ### 11.3 [关联容器操作](./Chapter11_%E5%85%B3%E8%81%94%E5%AE%B9%E5%99%A8/note/note_11.3.md) ### 11.4 [无序容器](./Chapter11_%E5%85%B3%E8%81%94%E5%AE%B9%E5%99%A8/note/note_11.4.md) ## 第 12 章 动态内存 ### 12.1 [动态内存与智能指针](./Chapter12_%E5%8A%A8%E6%80%81%E5%86%85%E5%AD%98/note/note_12.1.md) ### 12.2 [动态数组](./Chapter12_%E5%8A%A8%E6%80%81%E5%86%85%E5%AD%98/note/note_12.2.md) ### 12.3 [使用标准库:文本查询程序](./Chapter12_%E5%8A%A8%E6%80%81%E5%86%85%E5%AD%98/note/note_12.3.md) ## 第 13 章 拷贝控制 ### 13.1 [拷贝、赋值与销毁](./Chapter13_%E6%8B%B7%E8%B4%9D%E6%8E%A7%E5%88%B6/note/note_13.1.md) ### 13.2 [拷贝控制和资源管理](./Chapter13_%E6%8B%B7%E8%B4%9D%E6%8E%A7%E5%88%B6/note/note_13.2.md) ### 13.3 [交换操作](./Chapter13_%E6%8B%B7%E8%B4%9D%E6%8E%A7%E5%88%B6/note/note_13.3.md) ### 13.4 [拷贝控制示例](./Chapter13_%E6%8B%B7%E8%B4%9D%E6%8E%A7%E5%88%B6/note/note_13.4.md) ### 13.5 [动态内存管理类](./Chapter13_%E6%8B%B7%E8%B4%9D%E6%8E%A7%E5%88%B6/note/note_13.5.md) ### 13.6 [对象移动](./Chapter13_%E6%8B%B7%E8%B4%9D%E6%8E%A7%E5%88%B6/note/note_13.6.md) ## 第 14 章 重载运算与类型转换 ### 14.1 [基本概念](./Chapter14_%E9%87%8D%E8%BD%BD%E8%BF%90%E7%AE%97%E4%B8%8E%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/note/note_14.1.md) ### 14.2 [输入和输出运算符](./Chapter14_%E9%87%8D%E8%BD%BD%E8%BF%90%E7%AE%97%E4%B8%8E%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/note/note_14.2.md) ### 14.3 [算术和关系运算符](./Chapter14_%E9%87%8D%E8%BD%BD%E8%BF%90%E7%AE%97%E4%B8%8E%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/note/note_14.3.md) ### 14.4 [赋值运算符](./Chapter14_%E9%87%8D%E8%BD%BD%E8%BF%90%E7%AE%97%E4%B8%8E%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/note/note_14.4.md) ### 14.5 [下标运算符](./Chapter14_%E9%87%8D%E8%BD%BD%E8%BF%90%E7%AE%97%E4%B8%8E%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/note/note_14.5.md) ### 14.6 [递增和递减运算符](./Chapter14_%E9%87%8D%E8%BD%BD%E8%BF%90%E7%AE%97%E4%B8%8E%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/note/note_14.6.md) ### 14.7 [成员访问运算符](./Chapter14_%E9%87%8D%E8%BD%BD%E8%BF%90%E7%AE%97%E4%B8%8E%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/note/note_14.7.md) ### 14.8 [函数调用运算符](./Chapter14_%E9%87%8D%E8%BD%BD%E8%BF%90%E7%AE%97%E4%B8%8E%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/note/note_14.8.md) ### 14.9 [重载、类型转换与运算符](./Chapter14_%E9%87%8D%E8%BD%BD%E8%BF%90%E7%AE%97%E4%B8%8E%E7%B1%BB%E5%9E%8B%E8%BD%AC%E6%8D%A2/note/note_14.9.md) ## 第 15 章 面向对象程序设计 ### 15.1 [OOP:概述](./Chapter15_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/note/note_15.1.md) ### 15.2 [定义基类和派生类](./Chapter15_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/note/note_15.2.md) ### 15.3 [虚函数](./Chapter15_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/note/note_15.3.md) ### 15.4 [抽象基类](./Chapter15_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/note/note_15.4.md) ### 15.5 [访问控制与继承](./Chapter15_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/note/note_15.5.md) ### 15.6 [继承中的类作用域](./Chapter15_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/note/note_15.6.md) ### 15.7 [构造函数与拷贝控制](./Chapter15_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/note/note_15.7.md) ### 15.8 [容器与继承](./Chapter15_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/note/note_15.8.md) ### 15.9 [文本查询程序再探](./Chapter15_%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1/note/note_15.9.md) ## 第 16 章 模板与泛型编程 ### 16.1 [定义模板](./Chapter16_%E6%A8%A1%E6%9D%BF%E4%B8%8E%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/note/note_16.1.md) ### 16.2 [模板实参推断](./Chapter16_%E6%A8%A1%E6%9D%BF%E4%B8%8E%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/note/note_16.2.md) ### 16.3 [重载与模板](./Chapter16_%E6%A8%A1%E6%9D%BF%E4%B8%8E%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/note/note_16.3.md) ### 16.4 [可变参数模板](./Chapter16_%E6%A8%A1%E6%9D%BF%E4%B8%8E%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/note/note_16.4.md) ### 16.5 [模板特例化](./Chapter16_%E6%A8%A1%E6%9D%BF%E4%B8%8E%E6%B3%9B%E5%9E%8B%E7%BC%96%E7%A8%8B/note/note_16.5.md) ## 第 17 章 标准库特殊设施 ### 17.1 [tuple 类型](./Chapter17_%E6%A0%87%E5%87%86%E5%BA%93%E7%89%B9%E6%AE%8A%E8%AE%BE%E6%96%BD/note/note_17.1.md) ### 17.2 [bitset 类型](./Chapter17_%E6%A0%87%E5%87%86%E5%BA%93%E7%89%B9%E6%AE%8A%E8%AE%BE%E6%96%BD/note/note_17.2.md) ### 17.3 [正则表达式](./Chapter17_%E6%A0%87%E5%87%86%E5%BA%93%E7%89%B9%E6%AE%8A%E8%AE%BE%E6%96%BD/note/note_17.3.md) ### 17.4 [随机数](./Chapter17_%E6%A0%87%E5%87%86%E5%BA%93%E7%89%B9%E6%AE%8A%E8%AE%BE%E6%96%BD/note/note_17.4.md) ### 17.5 [IO 库再探](./Chapter17_%E6%A0%87%E5%87%86%E5%BA%93%E7%89%B9%E6%AE%8A%E8%AE%BE%E6%96%BD/note/note_17.5.md) ## 第 18 章 用于大型程序的工具 ### 18.1 [异常处理](./Chapter18_%E7%94%A8%E4%BA%8E%E5%A4%A7%E5%9E%8B%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%B7%A5%E5%85%B7/note/note_18.1.md) ### 18.2 [命名空间](./Chapter18_%E7%94%A8%E4%BA%8E%E5%A4%A7%E5%9E%8B%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%B7%A5%E5%85%B7/note/note_18.2.md) ### 18.3 [多重继承与虚继承](./Chapter18_%E7%94%A8%E4%BA%8E%E5%A4%A7%E5%9E%8B%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%B7%A5%E5%85%B7/note/note_18.3.md) ## 第 19 章 特殊工具与技术 ### 19.1 [控制内存分配](./Chapter19_%E7%89%B9%E6%AE%8A%E5%B7%A5%E5%85%B7%E4%B8%8E%E6%8A%80%E6%9C%AF/note/note_19.1.md) ### 19.2 [运行时类型识别](./Chapter19_%E7%89%B9%E6%AE%8A%E5%B7%A5%E5%85%B7%E4%B8%8E%E6%8A%80%E6%9C%AF/note/note_19.2.md) ### 19.3 [枚举类型](./Chapter19_%E7%89%B9%E6%AE%8A%E5%B7%A5%E5%85%B7%E4%B8%8E%E6%8A%80%E6%9C%AF/note/note_19.3.md) ### 19.4 [类成员指针](./Chapter19_%E7%89%B9%E6%AE%8A%E5%B7%A5%E5%85%B7%E4%B8%8E%E6%8A%80%E6%9C%AF/note/note_19.4.md) ### 19.5 [嵌套类](./Chapter19_%E7%89%B9%E6%AE%8A%E5%B7%A5%E5%85%B7%E4%B8%8E%E6%8A%80%E6%9C%AF/note/note_19.5.md) ### 19.6 [union :一种节省空间的类](./Chapter19_%E7%89%B9%E6%AE%8A%E5%B7%A5%E5%85%B7%E4%B8%8E%E6%8A%80%E6%9C%AF/note/note_19.6.md) ### 19.7 [局部类](./Chapter19_%E7%89%B9%E6%AE%8A%E5%B7%A5%E5%85%B7%E4%B8%8E%E6%8A%80%E6%9C%AF/note/note_19.7.md) ### 19.8 [固有的不可移植的特性](./Chapter19_%E7%89%B9%E6%AE%8A%E5%B7%A5%E5%85%B7%E4%B8%8E%E6%8A%80%E6%9C%AF/note/note_19.8.md) ## 附录 A 标准库 ### A.1 [标准库名字和头文件](./AppendixA_%E6%A0%87%E5%87%86%E5%BA%93/A.1_%E6%A0%87%E5%87%86%E5%BA%93%E5%90%8D%E5%AD%97%E5%92%8C%E5%A4%B4%E6%96%87%E4%BB%B6.md) ### A.2 [算法概览](./AppendixA_%E6%A0%87%E5%87%86%E5%BA%93/A.2_%E7%AE%97%E6%B3%95%E6%A6%82%E8%A7%88.md) ### A.3 [随机数](./AppendixA_%E6%A0%87%E5%87%86%E5%BA%93/A.3_%E9%9A%8F%E6%9C%BA%E6%95%B0.md) ## 待办事项 * 为附录 [A.2](./AppendixA_%E6%A0%87%E5%87%86%E5%BA%93/A.2_%E7%AE%97%E6%B3%95%E6%A6%82%E8%A7%88.md) 和 [A.3](./AppendixA_%E6%A0%87%E5%87%86%E5%BA%93/A.3_%E9%9A%8F%E6%9C%BA%E6%95%B0.md) 增加内容 * 在首页添加所有练习的链接(不知道是否必要,首页已经很长了) ## 遵守协议

C++ Primer 中文版:第 5 版 读书笔记/课后练习 by Zhaoze Liu is licensed under CC BY-NC-SA 4.0