C++ Primer (Chinese version 5Pan.baidu.com/s/1X1coefIG…Scan the qr code below to follow the public account to reply 100028 to obtain the share code
本书目录结构如下: 第1章 开始1 1.1 编写一个简单的c++程序2 1.1.1 编译、运行程序3 1.2 初识输入输出5 1.3 注释简介8 1.4 控制流10 1.4.1 while语句10 1.4.2 for语句11 1.4.3 读取数量不定的输入数据13 1.4.4 if语句15 1.5 类简介17 1.5.1 sales_item类17 1.5.2 初识成员函数20 1.6 书店程序21 小结23 术语表23 第ⅰ部分 c++基础27 第2章 变量和基本类型29 2.1 基本内置类型30 .2.1.1 算术类型30 2.1.2 类型转换32 2.1.3 字面值常量35 2.2 变量38 2.2.1 变量定义38 2.2.2 变量声明和定义的关系41 2.2.3 标识符42 2.2.4 名字的作用域43 2.3 复合类型45 2.3.1 引用45 2.3.2 指针47 2.3.3 理解复合类型的声明51 2.4 const限定符53 2.4.1 const的引用54 2.4.2 指针和const56 2.4.3 顶层const57 2.4.4 constexpr和常量表达式58 2.5 处理类型60 2.5.1 类型别名60 2.5.2 auto类型说明符61 2.5.3 decltype类型指示符62 2.6 自定义数据结构64 2.6.1 定义sales_data类型64 2.6.2 使用sales_data类66 2.6.3 编写自己的头文件67 小结69 术语表69 第3章 字符串、向量和数组73 3.1 命名空间的using声明74 3.2 标准库类型string75 3.2.1 定义和初始化string对象76 3.2.2 string对象上的操作77 3.2.3 处理string对象中的字符81 3.3 标准库类型vector86 3.3.1 定义和初始化vector对象87 3.3.2 向vector对象中添加元素90 3.3.3 其他vector操作91 3.4 迭代器介绍95 3.4.1 使用迭代器95 3.4.2 迭代器运算99 3.5 数组101 3.5.1 定义和初始化内置数组101 3.5.2 访问数组元素103 3.5.3 指针和数组105 3.5.4 c风格字符串109 3.5.5 与旧代码的接口111 3.6 多维数组112 小结117 术语表117 第4章 表达式119 4.1 基础120 4.1.1 基本概念120 4.1.2 优先级与结合律121 4.1.3 求值顺序123 4.2 算术运算符124 4.3 逻辑和关系运算符126 4.4 赋值运算符129 4.5 递增和递减运算符131 4.6 成员访问运算符133 4.7 条件运算符134 4.8 位运算符135 4.9 sizeof运算符139 4.10 逗号运算符140 4.11 类型转换141 4.11.1 算术转换142 4.11.2 其他隐式类型转换143 4.11.3 显式转换144 4.12 运算符优先级表147 小结149 术语表149 第5章 语句153 5.1 简单语句154 5.2 语句作用域155 5.3 条件语句156 5.3.1 if语句156 5.3.2 switch语句159 5.4 迭代语句165 5.4.1 while语句165 5.4.2 传统的for语句166 5.4.3 范围for语句168 5.4.4 do while语句169 5.5 跳转语句170 5.5.1 break语句170 5.5.2 continue语句171 5.5.3 goto语句172 5.6 try语句块和异常处理172 5.6.1 throw表达式173 5.6.2 try语句块174 5.6.3 标准异常176 小结178 术语表178 第6章 函数181 6.1 函数基础182 6.1.1 局部对象184 6.1.2 函数声明186 6.1.3 分离式编译186 6.2 参数传递187 6.2.1 传值参数187 6.2.2 传引用参数188 6.2.3 const形参和实参190 6.2.4 数组形参193 6.2.5 main:处理命令行选项196 6.2.6 含有可变形参的函数197 6.3 返回类型和return语句199 6.3.1 无返回值函数200 6.3.2 有返回值函数200 6.3.3 返回数组指针205 6.4 函数重载206 6.4.1 重载与作用域210 6.5 特殊用途语言特性211 6.5.1 默认实参211 6.5.2 内联函数和constexpr函数213 6.5.3 调试帮助215 6.6 函数匹配217 6.6.1 实参类型转换219 6.7 函数指针221 小结225 术语表225 第7章 类227 7.1 定义抽象数据类型228 7.1.1 设计sales_data类228 7.1.2 定义改进的sales_data类230 7.1.3 定义类相关的非成员函数234 7.1.4 构造函数235 7.1.5 拷贝、赋值和析构239 7.2 访问控制与封装240 7.2.1 友元241 7.3 类的其他特性243 7.3.1 类成员再探243 7.3.2 返回*this的成员函数246 7.3.3 类类型249 7.3.4 友元再探250 7.4 类的作用域253 7.4.1 名字查找与类的作用域254 7.5 构造函数再探257 7.5.1 构造函数初始值列表258 7.5.2 委托构造函数261 7.5.3 默认构造函数的作用262 7.5.4 隐式的类类型转换263 7.5.5 聚合类266 7.5.6 字面值常量类267 7.6 类的静态成员268 小结273 术语表273 第ⅱ部 c++标准库275 第8章 io库277 8.1 io类278 8.1.1 io对象无拷贝或赋值279 8.1.2 条件状态279 8.1.3 管理输出缓冲281 8.2 文件输入输出283 8.2.1 使用文件流对象284 8.2.2 文件模式286 8.3 string流287 8.3.1 使用istringstream287 8.3.2 使用ostringstream289 小结290 术语表290 第9章 顺序容器291 9.1 顺序容器概述292 9.2 容器库概览294 9.2.1 迭代器296 9.2.2 容器类型成员297 9.2.3 begin和end成员298 9.2.4 容器定义和初始化299 9.2.5 赋值和swap302 9.2.6 容器大小操作304 9.2.7 关系运算符304 9.3 顺序容器操作305 9.3.1 向顺序容器添加元素305 9.3.2 访问元素309 9.3.3 删除元素311 9.3.4 特殊的forward_list操作312 9.3.5 改变容器大小314 9.3.6 容器操作可能使迭代器失效315 9.4 vector对象是如何增长的317 9.5 额外的string操作320 9.5.1 构造string的其他方法321 9.5.2 改变string的其他方法322 9.5.3 string搜索操作325 9.5.4 compare函数327 9.5.5 数值转换327 9.6 容器适配器329 小结332 术语表332 第10章 泛型算法335 10.1 概述336 10.2 初识泛型算法338 10.2.1 只读算法338 10.2.2 写容器元素的算法339 10.2.3 重排容器元素的算法342 10.3 定制操作344 10.3.1 向算法传递函数344 10.3.2 lambda表达式345 10.3.3 lambda捕获和返回349 10.3.4 参数绑定354 10.4 再探迭代器357 10.4.1 插入迭代器358 10.4.2 iostream迭代器359 10.4.3 反向迭代器363 10.5 泛型算法结构365 10.5.1 5类迭代器365 10.5.2 算法形参模式367 10.5.3 算法命名规范368 10.6 特定容器算法369 小结371 术语表371 第11章 关联容器373 11.1 使用关联容器374 11.2 关联容器概述376 11.2.1 定义关联容器376 11.2.2 关键字类型的要求378 11.2.3 pair类型379 11.3 关联容器操作381 11.3.1 关联容器迭代器382 11.3.2 添加元素383 11.3.3 删除元素386 11.3.4 map的下标操作387 11.3.5 访问元素388 11.3.6 一个单词转换的map391 11.4 无序容器394 小结397 术语表397 第12章 动态内存399 12.1 动态内存与智能指针400 12.1.1 shared_ptr类400 12.1.2 直接管理内存407 12.1.3 shared_ptr和new结合使用412 12.1.4 智能指针和异常415 12.1.5 unique_ptr417 12.1.6 weak_ptr420 12.2 动态数组423 12.2.1 new和数组423 12.2.2 allocator类427 12.3 使用标准库:文本查询程序430 12.3.1 文本查询程序设计430 12.3.2 文本查询程序类的定义432 小结436 术语表436 第ⅲ部分 类设计者的工具437 第13章 拷贝控制439 13.1 拷贝、赋值与销毁440 13.1.1 拷贝构造函数440 13.1.2 拷贝赋值运算符443 13.1.3 析构函数444 13.1.4 三/五法则447 13.1.5 使用=default449 13.1.6 阻止拷贝449 13.2 拷贝控制和资源管理452 13.2.1 行为像值的类453 13.2.2 定义行为像指针的类455 13.3 交换操作457 13.4 拷贝控制示例460 13.5 动态内存管理类464 13.6 对象移动470 13.6.1 右值引用471 13.6.2 移动构造函数和移动赋值运算符473 13.6.3 右值引用和成员函数481 小结486 术语表486 第14章 操作重载与类型转换489 14.1 基本概念490 14.2 输入和输出运算符494 14.2.1 重载输出运算符[[494 14.2.2 重载输入运算符]]495 14.3 算术和关系运算符497 14.3.1 相等运算符497 14.3.2 关系运算符498 14.4 赋值运算符499 14.5 下标运算符501 14.6 递增和递减运算符502 14.7 成员访问运算符504 14.8 函数调用运算符506 14.8.1 lambda是函数对象507 14.8.2 标准库定义的函数对象509 14.8.3 可调用对象与function511 14.9 重载、类型转换与运算符514 14.9.1 类型转换运算符514 14.9.2 避免有二义性的类型转换517 14.9.3 函数匹配与重载运算符521 小结523 术语表523 第15章 面向对象程序设计525 15.1 oop:概述526 15.2 定义基类和派生类527 15.2.1 定义基类528 15.2.2 定义派生类529 15.2.3 类型转换与继承534 15.3 虚函数536 15.4 抽象基类540 15.5 访问控制与继承542 15.6 继承中的类作用域547 15.7 构造函数与拷贝控制551 15.7.1 虚析构函数552 15.7.2 合成拷贝控制与继承552 15.7.3 派生类的拷贝控制成员554 15.7.4 继承的构造函数557 15.8 容器与继承558 15.8.1 编写basket类559 15.9 文本查询程序再探562 15.9.1 面向对象的解决方案563 15.9.2 query_base类和query类567 15.9.3 派生类568 15.9.4 eval函数571 小结575 术语表575 第16章 模板与泛型编程577 16.1 定义模板578 16.1.1 函数模板578 16.1.2 类模板583 16.1.3 模板参数592 16.1.4 成员模板595 16.1.5 控制实例化597 16.1.6 效率与灵活性599 16.2 模板实参推断600 16.2.1 类型转换与模板类型参数601 16.2.2 函数模板显式实参603 16.2.3 尾置返回类型与类型转换604 16.2.4 函数指针和实参推断607 16.2.5 模板实参推断和引用608 16.2.6 理解std::move610 16.2.7 转发612 16.3 重载与模板614 16.4 可变参数模板618 16.4.1 编写可变参数函数模板620 16.4.2 包扩展621 16.4.3 转发参数包622 16.5 模板特例化624 小结630 术语表630 第ⅳ部分 高级主题633 第17章 标准库特殊设施635 17.1 tuple类型636 17.1.1 定义和初始化tuple637 17.1.2 使用tuple返回多个值638 17.2 bitset类型640 17.2.1 定义和初始化bitset641 17.2.2 bitset操作643 17.3 正则表达式645 17.3.1 使用正则表达式库646 17.3.2 匹配与regex迭代器类型650 17.3.3 使用子表达式653 17.3.4 使用regex_replace657 17.4 随机数659 17.4.2 其他随机数分布663 bernoulli_distribution类665 17.5 io库再探666 17.5.1 格式化输入与输出666 17.5.2 未格式化的输入/输出操作673 17.5.3 流随机访问676 小结680 术语表680 第18章 用于大型程序的工具683 18.1 异常处理684 18.1.1 抛出异常684 18.1.2 捕获异常687 18.1.3 函数try语句块与构造函数689 18.1.4 noexcept异常说明690 18.1.5 异常类层次693 18.2 命名空间695 18.2.1 命名空间定义695 18.2.2 使用命名空间成员701 18.2.3 类、命名空间与作用域705 18.2.4 重载与命名空间708 18.3 多重继承与虚继承710 18.3.1 多重继承711 18.3.2 类型转换与多个基类713 18.3.3 多重继承下的类作用域715 18.3.4 虚继承717 18.3.5 构造函数与虚继承720 小结722 术语表722 第19章 特殊工具与技术725 19.1 控制内存分配726 19.1.1 重载new和delete726 19.1.2 定位new表达式729 19.2 运行时类型识别730 19.2.1 dynamic_cast运算符730 19.2.2 typeid运算符732 19.2.3 使用rtti733 19.2.4 type_info类735 19.3 枚举类型736 19.4 类成员指针739 19.4.1 数据成员指针740 19.4.2 成员函数指针741 19.4.3 将成员函数用作可调用对象744 19.5 嵌套类746 19.6 union:一种节省空间的类749 19.7 局部类754 19.8 固有的不可移植的特性755 19.8.1 位域756 19.8.2 volatile限定符757 19.8.3 链接指示:extern “c”758 小结762 术语表762 附录a 标准库765 a.1 标准库名字和头文件766 a.2 算法概览770 a.2.1 查找对象的算法771 a.2.2 其他只读算法772 a.2.3 二分搜索算法772 a.2.4 写容器元素的算法773 a.2.5 划分与排序算法775 a.2.6 通用重排操作776 a.2.7 排列算法778 a.2.8 有序序列的集合算法778 a.2.9 最小值和最大值779 a.2.10 数值算法780 a.3 随机数781 a.3.1 随机数分布781 a.3.2 随机数引擎783 c++11的新特性 2.1.1 long long类型31 2.2.1 列表初始化39 2.3.2 nullptr常量48 2.4.4 constexpr变量59 2.5.1 类型别名声明60 2.5.2 auto类型指示符61 2.5.3 decltype类型指示符62 2.6.1 类内初始化65 3.2.2 使用auto或decltype缩写类型79 3.2.3 范围for语句82 3.3 定义vector对象的vector(向量的向量)87 3.3.1 vector对象的列表初始化88 3.4.1 容器的cbegin和cend函数98 3.5.3 标准库begin和end函数106 3.6 使用auto和decltype简化声明115 4.2 除法的舍入规则125 4.4 用大括号包围的值列表赋值129 4.9 将sizeof用于类成员139 5.4.3 范围for语句168 6.2.6 标准库initializer_list类197 6.3.2 列表初始化返回值203 6.3.3 定义尾置返回类型206 6.3.3 使用decltype简化返回类型定义 6.5.2 constexpr函数214 7.1.4 使用=default生成默认构造函数237 7.3.1 类对象成员的类内初始化246 7.5.2 委托构造函数261 7.5.6 constexpr构造函数268 8.2.1 用string对象处理文件名284 9.1 array和forward_list容器293 9.2.3 容器的cbegin和cend函数298 9.2.4 容器的列表初始化300 9.2.5 容器的非成员函数swap303 9.3.1 容器insert成员的返回类型308 9.3.1 容器的emplace成员的返回类型308 9.4 shrink_to_fit318 9.5.5 string的数值转换函数327 10.3.2 lambda表达式346 10.3.3 lambda表达式中的尾置返回类型353 10.3.4 标准库bind函数354 11.2.1 关联容器的列表初始化377 11.2.3 列表初始化pair的返回类型380 11.3.2 pair的列表初始化384 11.4 无序容器394 12.1 智能指针400 12.1.1 shared_ptr类 12.1.2 动态分配对象的列表初始化407 12.1.2 auto和动态分配408 12.1.5 unique_ptr类417 12.1.6 weak_ptr类420 12.2.1 范围for语句不能应用于动态分配数组424 12.2.1 动态分配数组的列表初始化424 12.2.1 auto不能用于分配数组424 12.2.2 allocator::construct可使用任意构造函数428 13.1.5 将=default用于拷贝控制成员449 13.1.6 使用=default阻止拷贝类对象449 13.5 用移动类对象代替拷贝类对象469 13.6.1 右值引用471 13.6.1 标准库move函数472 13.6.2 移动构造函数和移动赋值473 13.6.2 移动构造函数通常应该是noexcept473 13.6.2 移动迭代器480 13.6.3 引用限定成员函数483 14.8.3 function类模板512 14.9.1 explicit类型转换运算符516 15.2.2 虚函数的override指示符530 15.2.2 通过定义类为final来阻止继承533 15.3 虚函数的override和final指示符538 15.7.2 删除的拷贝控制和继承553 15.7.4 继承的构造函数557 16.1.2 声明模板类型形参为友元590 16.1.2 模板类型别名590 16.1.3 模板函数的默认模板参数594 16.1.5 实例化的显式控制597 16.2.3 模板函数与尾置返回类型605 16.2.5 引用折叠规则609 16.2.6 用static_cast将左值转换为右值612 16.2.7 标准库forward函数614 16.4 可变参数模板618 16.4 sizeof…运算符619 16.4.3 可变参数模板与转发622 17.1 标准库tuple类模板636 17.2.2 新的bitset运算643 17.3 正则表达式库645 17.4 随机数库659 17.5.1 浮点数格式控制670 18.1.4 noexcept异常指示符690 18.1.4 noexcept运算符691 18.2.1 内联名字空间699 18.3.1 继承的构造函数和多重继承712 19.3 有作用域的enum736 19.3 说明类型用于保存enum对象738 19.3 enum的提前声明738 19.4.3 标准库mem_fn类模板746 19.6 类类型的联合成员751