发表于2024-11-22
Ivor Horton经典作品:
《C++标准模板库编程实战》介绍*新的C++14标准的API、库和扩展,以及如何将它们运用到C++14程序中。在书中,作者Ivor Horton 则阐述了什么是STL,以及如何将它们应用到程序中。我们将学习如何使用容器、迭代器,以及如何定义、创建和应用算法。此外,还将学习函数对象和适配器,以及它们的用法。
阅读完本书之后,你将能够了解如何扩展STL,如何定义自定义类型的C++组件,你还将能够定义既满足C++ STL要求又遵从*常见的设计模式和*佳实践的自定义类型。
标准库是C++标准的一个基本部分,它为C++程序员提供了一套全面而又高效的工具,还提供了一些适用于多种类型程序的可重用组件。
主要内容
◆ 如何在C++程序中使用STL
◆ 如何使用容器
◆ 如何使用迭代器
◆ 如何定义、生成和运用算法
◆ 如何使用函数对象
◆ 如何扩展STL,以及如何定义自定义类型的组件
◆ 如何使用适配器
◆ 如何定义自定义类型,使之既满足C++ STL的要求又遵从通用的设计模式和实践
Ivor Horton是世界著名计算机图书作家,独立顾问,帮助无数程序员步入编程殿堂。他曾在IBM工作多年,以优异成绩拥有数学学士学位。
他的资历包括:使用大多数语言(如在多种机器上使用汇编语言和高级语言)进行编程,实时编程,设计和实现实时闭环工业控制系统。Horton拥有丰富的面向工程师和科学家的编程教学经验(教学内容包括C、C++、Fortran、PL/1、APL等)。同时,他还是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。
第1章 STL介绍 1
1.1 基本思想 2
1.2 模板 2
1.3 容器 6
1.4 迭代器 7
1.4.1 获取迭代器 8
1.4.2 迭代器的类别 8
1.4.3 流迭代器 11
1.4.4 迭代器适配器 12
1.5 迭代器上的运算 14
1.6 智能指针 14
1.6.1 使用unique_ptr指针 16
1.6.2 使用shared_ptr指针 18
1.6.3 weak_ptr指针 21
1.7 算法 22
1.8 将函数作为实参传入 23
1.8.1 函数对象 23
1.8.2 lambda表达式 24
1.9 小结 28
练习 29
第2章 使用序列容器 31
2.1 序列容器 31
2.2 使用array容器 35
2.2.1 访问元素 36
2.2.2 使用数组容器的迭代器 39
2.2.3 比较数组容器 41
2.3 使用vector容器 42
2.3.1 创建vector容器 42
2.3.2 vector的容量和大小 44
2.3.3 访问元素 45
2.3.4 使用vector容器的
迭代器 46
2.3.5 向vector容器中添加
元素 49
2.3.6 删除元素 53
2.3.7 vector容器 57
2.4 使用deque容器 58
2.4.1 生成deque容器 58
2.4.2 访问元素 59
2.4.3 添加和移除元素 59
2.4.4 替换deque容器中的内容 60
2.5 使用list容器 62
2.5.1 生成list容器 63
2.5.2 添加元素 63
2.5.3 移除元素 65
2.5.4 排序和合并元素 66
2.5.5 访问元素 69
2.6 使用forward_list容器 71
2.7 自定义迭代器 76
2.7.1 STL迭代器的要求 76
2.7.2 走进STL 77
2.8 本章小结 86
练习 87
第3章 容器适配器 89
3.1 什么是容器适配器 89
3.2 创建和使用stack容器
适配器 90
3.3 创建和使用queue容器
适配器 95
3.3.1 queue操作 96
3.3.2 queue容器的实际使用 97
3.4 使用priority_queue容器
适配器 102
3.4.1 创建priority_queue 103
3.4.2 priority_queue操作 104
3.5 堆 107
3.5.1 创建堆 108
3.5.2 堆操作 110
3.6 在容器中保存指针 116
3.6.1 在序列容器中保存指针 116
3.6.2 在优先级队列中存储
指针 123
3.6.3 指针的堆 125
3.6.4 基类指针的容器 125
3.6.5 对指针序列应用算法 129
3.7 本章小结 130
练习 130
第4章 map容器 131
4.1 map容器介绍 131
4.2 map容器的用法 132
4.2.1 创建map容器 134
4.2.2 map元素的插入 135
4.2.3 在map中构造元素 142
4.2.4 访问map中的元素 142
4.2.5 删除元素 152
4.3 pair<>和tuple<>的用法 152
4.3.1 pair的操作 153
4.3.2 tuple的操作 156
4.3.3 tuples和 pairs实战 158
4.4 multimap容器的用法 163
4.5 改变比较函数 168
4.5.1 greater对象的用法 168
4.5.2 用自定义的函数对象来比较
元素 169
4.6 哈希 170
4.7 unordered_map容器的用法 173
4.7.1 生成和管理unordered_map
容器 175
4.7.2 调整格子个数 177
4.7.3 插入元素 178
4.7.4 访问元素 179
4.7.5 移除元素 180
4.7.6 访问格子 180
4.8 unordered_multimap容器的
用法 184
4.9 本章小结 192
练习 193
第5章 set的使用 195
5.1 理解set容器 195
5.2 使用set容器 196
5.2.1 添加和移除元素 197
5.2.2 访问元素 199
5.2.3 使用set 199
5.2.4 set迭代器 209
5.2.5 在set容器中保存指针 209
5.3 使用multiset容器 215
5.3.1 保存派生类对象的指针 217
5.3.2 定义容器 219
5.3.3 定义示例的main()函数 220
5.4 unordered_set容器 223
5.4.1 添加元素 224
5.4.2 检索元素 225
5.4.3 删除元素 226
5.4.4 创建格子列表 227
5.5 使用unordered_multiset
容器 228
5.6 集合运算 233
5.6.1 set_union()算法 234
5.6.2 set_intersection()算法 235
5.6.3 set_difference()算法 236
5.6.4 set_symmetric_difference()
算法 236
5.6.5 includes()算法 236
5.6.6 集合运算的运用 238
5.7 本章小结 240
练习 240
第6章 排序、合并、搜索和分区 243
6.1 序列排序 243
6.1.1 排序以及相等元素的
顺序 246
6.1.2 部分排序 247
6.1.3 测试排序序列 250
6.2 合并序列 251
6.3 搜索序列 260
6.3.1 在序列中查找元素 260
6.3.2 在序列中查找任意范围的
元素 262
6.3.3 在序列中查找多个元素 264
6.4 分区序列 268
6.4.1 partition_copy()算法 270
6.4.2 partition_point()算法 271
6.5 二分查找算法 272
6.5.1 binary_search()算法 273
6.5.2 lower_bound()算法 274
6.5.3 equal_range()算法 274
6.6 本章小结 277
练习 278
第7章 更多的算法 279
7.1 检查元素的属性 279
7.2 序列的比较 281
7.2.1 查找序列的不同之处 283
7.2.2 按字典序比较序列 286
7.2.3 序列的排列 287
7.3 复制序列 292
7.3.1 复制一定数目的元素 292
7.3.2 条件复制 292
7.4 复制和反向元素顺序 296
7.5 复制一个删除相邻重复元素的
序列 297
7.6 从序列中移除相邻的重复
元素 298
7.7 旋转序列 299
7.8 移动序列 301
7.9 从序列中移除元素 303
7.10 设置和修改序列中的
元素 305
7.10.1 用函数生成元素的值 306
7.10.2 转换序列 307
7.10.3 替换序列中的元素 310
7.11 算法的应用 311
7.12 本章小结 315
练习 320
第8章 生成随机数 321
8.1 什么是随机数 321
8.2 概率、分布以及熵 322
8.2.1 什么是概率 322
8.2.2 什么是分布 322
8.2.3 什么是熵 324
8.3 用STL生成随机数 324
8.3.1 生成随机数的种子 325
8.3.2 获取随机种子 325
8.3.3 种子序列 326
8.4 分布类 329
8.4.1 默认随机数生成器 329
8.4.2 创建分布对象 330
8.4.3 均匀分布 331
8.4.4 正态分布 342
8.4.5 对数分布 347
8.4.6 其他和正态分布相关的
分布 350
8.4.7 抽样分布 351
8.4.8 其他分布 365
8.5 随机数生成引擎和生成器 370
8.5.1 线性同余引擎 371
8.5.2 马特赛特旋转演算法
引擎 372
8.5.3 带进位减法引擎 372
8.6 重组元素序列 373
8.7 本章小结 374
练习 375
第9章 流操作 377
9.1 流迭代器 377
9.1.1 输入流迭代器 377
9.1.2 输出流迭代器 381
9.2 重载插入和提取运算符 383
9.3 对文件使用流迭代器 384
9.3.1 文件流 385
9.3.2 文件流类的模板 385
9.3.3 用流迭代器进行文件
输入 386
9.3.4 用流迭代器来反复读
文件 388
9.3.5 用流迭代器输出文件 390
9.4 流迭代器和算法 391
9.5 流缓冲区迭代器 395
9.5.1 输入流缓冲区迭代器 395
9.5.2 输出流缓冲区迭代器 396
9.5.3 对文件流使用输出流缓冲区
迭代器 397
9.6 string流、流,以及流缓冲区
迭代器 399
9.7 本章小结 402
练习 402
第10章 使用数值、时间和复数 403
10.1 数值计算 403
10.2 数值算法 403
10.2.1 保存序列中的增量值 404
10.2.2 求序列的和 405
10.2.3 内积 406
10.2.4 相邻差 411
10.2.5 部分和 411
10.2.6 极大值和极小值 413
10.3 保存和处理数值 414
10.3.1 valarray对象的基本
操作 415
10.3.2 一元运算符 418
10.3.3 用于valarray对象的复合
赋值运算符 419
10.3.4 valarray对象的二元
运算 420
10.3.5 访问valarray对象中的
元素 421
10.3.6 多个切片 436
10.3.7 选择多行或多列 438
10.3.8 使用gslice对象 439
10.3.9 选择元素的任意子集 440
10.3.10 有条件地选择元素 441
10.3.11 有理数算法 442
10.4 时序模板 445
10.4.1 定义duration 446
10.4.2 时钟和时间点 451
10.5 复数 458
10.5.1 生成表示复数的对象 459
10.5.2 复数的运算 460
10.5.3 复数上的比较和其他
运算 460
10.5.4 一个使用复数的简单
示例 461
10.6 本章小结 463
练习 464
欢迎学习《C++标准模板库编程实战》一书。本教程介绍了由C++标准库组成的头文件子集中所包含的一些类和函数的模板。这些模板是功能强大、易于使用的泛型编程工具,并使很多不容易实现的任务变得易于实现。它们生成的代码通常比我们自己编写的更加高效和可靠。
通常,笔者不喜欢只解释它们做了些什么,而不详细论述这么做的原因。从前者是很难猜出后者的。因此笔者的目标不仅仅是解释类和函数模板的功能,还会尽可能地展示如何在实际场景中应用它们。这会导致在某些知识点的介绍中包含相当大的代码块,但相信你会觉得它们是值得的。
之前提到的作为本书主题的来自于C++标准库的头文件的集合,被称作C++标准库或STL。在本书中,会用STL作为一种方便的缩写来表示包含本书所讨论模板的头文件的集合。当然,并没有STL这种东西——C++语言标准并没有提到它,因此正规而言,它并不存在。尽管它并没有被定义,但很多C++程序员都大致知道STL是什么意思。这种叫法由来已久。
贯穿STL的泛型编程思想早在1979年起源于Alexander Stepanov——很久之前并没有C++语言标准。C++的STL的第一个实现起源于Stepanov和其他在1989年前后工作于惠普公司的职员,而且在那时,STL的实现和C++编译器所提供的库是互补的。在20世纪90年代,STL提供的功能开始被考虑纳入第一个C++语言标准的提议中,而且STL的精髓使它成为公布于1998年的第一个C++语言标准。从那时起,STL所代表的泛型编程开始被改进和扩展,并且很多不属于STL的头文件中开始出现了模板。本书中的所有材料都和编写本书时*新通过的语言标准相关,也就是C++14。
STL不是一个准确的概念,并且本书中并没有包含C++标准库的全部模板。本书只描述和展示了笔者认为C++程序员应该首先选择理解的标准库中的模板,尤其是那些初次接触C++的开发者。书中将被深度讨论的主要标准库头文件包括:
用于数据容器:、、、、、、、、、、
用于迭代器:
用于算法:
用于随机数和统计:
用于数值处理:、
用于时间和定时:、
用于复数:
来自于其他头文件的模板,比如、、和也被加入到本书的不同章节中。数据容器的模板是基础,在很多程序中都会用到它们。迭代器是使用容器时的基本工具,因此它们也被包含了进来。算法是操作保存在容器中的数据的函数模板,也可以将这些强大的工具应用到数组上,在示例中会对此进行描述和展示。书中有一章将解释随机数生成和统计相关的模板,但是它们中有一些是相当专业的。在模拟、建模和游戏程序中,很多都得到了广泛应用。本书还讨论了计算扩展数值数据的模板,以及和时间、定时相关的模板。*后,简短介绍了一个关于用于处理复数的类模板。
使用本书的先决条件
为了理解本书的内容,需要具备一些C++语言的基本知识。本书是对《C++入门经典(第4版)》一书的补充,所以如果成功读完了那本书,就可以开始阅读这本了。需要知道的基本知识包括:类和函数模板是什么,它们工作的本质是怎样的。笔者在第1章包含了这些基本知识的概述,如果之前不习惯使用模板,它们的语法会让人觉得它们比它们本身要复杂得多。一旦开始习惯这些记号,就会发现它们的用法相对容易。STL中也频繁使用了lambda表达式,所以也必须习惯使用它。
我们需要一个兼容C++14的编译器。当然,为了编写程序 C++标准模板库编程实战 下载 mobi epub pdf txt 电子书 格式
C++标准模板库编程实战 下载 mobi pdf epub txt 电子书 格式 2024
C++标准模板库编程实战 下载 mobi epub pdf 电子书还可以,接下来要好好学习下
评分很好,一次买了好几百的书,很实惠
评分哈哈哈红红火火恍恍惚惚
评分才看了一点点就有点看不下去了,因为有点难度,难过。但是感觉应该很有用,还是会坚持的!刚好暑假到了,可以继续看!
评分好 很好的东西 希望下次还能来买
评分书还是好书 内容不错 但是印刷质量不行 有的地方明显有重影 另外有的函数明显写错了 不知道是翻译就出错了 还是出版社打印的失误 我目前就看了40页 就发现了不少类似的问题
评分方便,快捷,整齐,认真,非常满意!
评分甚好的书,推荐。。。
评分大师就是大师,说的话都听不懂
C++标准模板库编程实战 mobi epub pdf txt 电子书 格式下载 2024