C++程序设计语言(第4部分:标准库)(原书第4版)
商品已成功飞到您的手机啦!快登录手机站看看吧!
> 扫一扫 下载客户端
> 微信关注“互动出版网”,便捷查询订单,更多惊喜天天有
基本信息
- 原书名:The C++ Programming Language,Fourth Edition
内容简介
书籍 计算机书籍
《C++程序设计语言》(原书第4版)是C++领域最经典的参考书,介绍了C++11的各项新特性和新功能。全书共分四部分。第一部分(第1~5章)是引言,包括C++的背景知识,C++语言及其标准库的简要介绍;第二部分(第6~15章)介绍C++的内置类型和基本特性,以及如何用它们构造程序;第三部分(第16~29章)介绍C++的抽象机制及如何用这些机制编写面向对象程序和泛型程序;第四部分(第30~44章)概述标准库并讨论一些兼容性问题。
由于篇幅问题,原书中文版分两册出版,分别对应原书的第一至三部分和第四部分,这一册为第四部分。
本书适合计算机及相关专业本科生用作C++课程的教材,也适合C++程序设计新手和开发人员阅读。
作译者
译者序
历时近两年,终于翻译完了《C++程序设计语言》(原书第4版)。全书包含44章,英文原版共有1300多页,是C++语言之父Bjarne Stroustrup的一部呕心沥血之作。
这部巨著有几个特点:
一是知识结构完整,对C++语言的介绍非常全面。作者按照“基本功能”→“抽象机制”→“标准库”的递进层次组织全书,由浅入深地把C++语言的方方面面呈现在读者的面前。各种水平、各种背景的读者都能在书中找到适合自己的切入点和学习路径。
二是对细节的讲解非常深入,有利于读者了解和掌握语言的精华。作为C++语言的发明者和主要维护者,Bjarne Stroustrup在撰写本书时绝不仅仅满足于阐明语法和知识点本身。他试图向读者揭示各个语言功能的设计初衷,以及他对各种制约因素是如何考虑并妥协的。对于大多数读者来说,这种视角新奇而有趣。他们不再只是被动的学习者,在知道了“是什么”和“为什么”之后,还可以大胆地揣测“C++语言接下来该如何继续发展”。不得不说,这是本书与其他C++书籍的最大区别。
三是作者在写作中融入了很多自己的工程实践经验。学习程序设计语言与学习文化课有很大的不同。设计程序的过程是一门艺术,程序语言只是完成艺术作品所需的工具。举个例子来说,由于各种各样的原因,在C++中存在一些语言特性,它们的功能和作用非常类似。那么这些特性之间是何关系·在遇到某类实际问题时应该如何聪明地选择·本书很好地回答了此类问题。
以译者的浅见,程序员应该是艺术家(Artist),而非匠人(Worker)——后者只会堆砌代码,而前者能创造出美好的作品。这也应该是Bjarne Stroustrup写作本书时所追求的吧!
这本译著的出版凝结了很多人的智慧和心血,绝非译者二人独力可为。感谢机械工业出版社的朱劼、关敏等编辑在本书译校和出版过程中的辛勤付出,她们给予了我们很多无私的帮助。由于译者水平有限,书中难免有一些不当之处,恳请读者不吝批评指正。
译者
2016年春于南开园
目录
出版者的话
译者序
前言
第3版前言
第2版前言
第1版前言
第四部分 标准库
第30章 标准库概览 2
30.1 引言 2
30.1.1 标准库设施 2
30.1.2 设计约束 4
30.1.3 描述风格 4
30.2 头文件 5
30.3 语言支持 9
30.3.1 initializer_list支持 9
30.3.2 范围for支持 10
30.4 错误处理 10
30.4.1 异常 10
30.4.2 断言 14
30.4.3 system_error 15
30.5 建议 23
第31章 STL容器 24
31.1 引言 24
31.2 容器概览 24
31.2.1 容器表示 27
31.2.2 对元素的要求 28
31.3 操作概览 30
31.3.1 成员类型 32
31.3.2 构造函数、析构函数和赋值操作 33
31.3.3 大小和容量 34
31.3.4 迭代器 35
31.3.5 元素访问 36
31.3.6 栈操作 36
31.3.7 列表操作 37
31.3.8 其他操作 38
31.4 容器 38
31.4.1 vector 38
31.4.2 链表 42
31.4.3 关联容器 44
31.5 容器适配器 53
31.5.1 stack 54
31.5.2 queue 55
31.5.3 priority_queue 56
31.6 建议 57
第32章 STL算法 59
32.1 引言 59
32.2 算法 59
32.2.1 序列 60
32.3 策略实参 61
32.3.1 复杂性 62
32.4 不修改序列的算法 63
32.4.1 for_each() 63
32.4.2 序列谓词 63
32.4.3 count() 63
32.4.4 find() 64
32.4.5 equal()和mismatch() 64
32.4.6 search() 65
32.5 修改序列的算法 66
32.5.1 copy() 66
32.5.2 unique() 67
32.5.3 remove()和replace() 68
32.5.4 rotate()、random_shuffle()和partition() 69
32.5.5 排列 70
32.5.6 fill() 70
32.5.7 swap() 71
32.6 排序和搜索 71
32.6.1 二分搜索 74
32.6.2 merge() 75
32.6.3 集合算法 75
32.6.4 堆 76
32.6.5 lexicographical_compare() 77
32.7 最大值和最小值 78
32.8 建议 79
第33章 STL迭代器 80
33.1 引言 80
33.1.1 迭代器模型 80
33.1.2 迭代器类别 81
33.1.3 迭代器萃取 82
33.1.4 迭代器操作 85
33.2 迭代器适配器 85
33.2.1 反向迭代器 86
33.2.2 插入迭代器 88
33.2.3 移动迭代器 89
33.3 范围访问函数 89
33.4 函数对象 90
33.5 函数适配器 91
33.5.1 bind() 92
33.5.2 mem_fn() 93
33.5.3 function 93
33.6 建议 95
第34章 内存和资源 96
34.1 引言 96
34.2 “拟容器” 96
34.2.1 array 97
34.2.2 bitset 99
34.2.3 vector<bool> 103
34.2.4 元组 104
34.3 资源管理指针 107
34.3.1 unique_ptr 108
34.3.2 shared_ptr 111
34.3.3 weak_ptr 113
34.4 分配器 115
34.4.1 默认分配器 116
34.4.2 分配器萃取 118
34.4.3 指针萃取 119
34.4.4 限域的分配器 119
34.5 垃圾收集接口 121
34.6 未初始化内存 123
34.6.1 临时缓冲区 123
34.6.2 raw_storage_iterator 124
34.7 建议 125
第35章 工具 126
35.1 引言 126
35.2 时间 126
35.2.1 duration 127
35.2.2 time_point 129
35.2.3 时钟 131
35.2.4 时间萃取 132
35.3 编译时有理数运算 132
35.4 类型函数 134
35.4.1 类型萃取 134
35.4.2 类型生成器 138
35.5 其他工具 142
35.5.1 move()和forward() 142
35.5.2 swap() 143
35.5.3 关系运算符 143
35.5.4 比较和哈希type_info 144
35.6 建议 145
第36章 字符串 146
36.1 引言 146
36.2 字符分类 146
36.2.1 分类函数 146
36.2.2 字符萃取 147
36.3 字符串 148
36.3.1 string与C风格字符串 149
36.3.2 构造函数 151
36.3.3 基本操作 152
36.3.4 字符串I/O 153
36.3.5 数值转换 154
36.3.6 类STL操作 155
36.3.7 find系列函数 157
36.3.8 子串 158
36.4 建议 159
第37章 正则表达式 160
37.1 正则表达式 160
37.1.1 正则表达式符号表示 161
37.2 regex 165
37.2.1 匹配结果 166
37.2.2 格式化 169
37.3 正则表达式函数 170
37.3.1 regex_match() 170
37.3.2 regex_search() 171
37.3.3 regex_replace() 172
37.4 正则表达式迭代器 173
37.4.1 regex_iterator 173
37.4.2 regex_token_iterator 175
37.5 regex_traits 176
37.6 建议 177
第38章 I/O流 178
38.1 引言 178
38.2 I/O流层次 180
38.2.1 文件流 180
38.2.2 字符串流 182
38.3 错误处理 183
38.4 I/O操作 184
38.4.1 输入操作 185
38.4.2 输出操作 187
38.4.3 操纵符 189
38.4.4 流状态 190
38.4.5 格式化 194
38.5 流迭代器 200
38.6 缓冲 201
38.6.1 输出流和缓冲区 204
38.6.2 输入流和缓冲区 205
38.6.3 缓冲区迭代器 205
38.7 建议 207
第39章 区域设置 209
39.1 处理文化差异 209
39.2 类locale 211
39.2.1 命名locale 213
39.2.2 比较string 216
39.3 类facet 217
39.3.1 访问locale中的facet 218
39.3.2 一个简单的用户自定义facet 218
39.3.3 locale和facet的使用 221
39.4 标准facet 221
39.4.1 string比较 223
39.4.2 数值格式化 226
39.4.3 货币格式化 231
39.4.4 日期和时间格式化 235
39.4.5 字符分类 238
39.4.6 字符编码转换 241
39.4.7 消息 244
39.5 便利接口 248
39.5.1 字符分类 248
39.5.2 字符转换 248
39.5.3 字符串转换 249
39.5.4 缓冲区转换 250
39.6 建议 250
第40章 数值计算 252
40.1 引言 252
40.2 数值限制 252
40.2.1 数值限制宏 255
40.3 标准数学函数 255
40.4 复数complex 257
40.5 数值数组:valarray 258
40.5.1 构造函数和赋值操作 258
40.5.2 下标操作 260
40.5.3 运算 261
40.5.4 切片 263
40.5.5 slice_array 265
40.5.6 推广切片 265
40.6 推广数值算法 267
40.6.1 accumulate() 267
40.6.2 inner_product() 268
40.6.3 partial_sum()和adjacent_difference() 269
40.6.4 iota() 270
40.7 随机数 270
40.7.1 引擎 272
40.7.2 随机设备 274
40.7.3 分布 274
40.7.4 C风格随机数 277
40.8 建议 278
第41章 并发 279
41.1 引言 279
41.2 内存模型 280
41.2.1 内存位置 281
41.2.2 指令重排 282
41.2.3 内存序 282
41.2.4 数据竞争 283
41.3 原子性 285
41.3.1 atomic类型 287
41.3.2 标志和栅栏 291
41.4 volatile 292
41.5 建议 292
第42章 线程和任务 293
42.1 引言 293
42.2 线程 293
42.2.1 身份 294
42.2.2 构造 295
42.2.3 析构 296
42.2.4 join() 297
42.2.5 detach() 298
42.2.6 名字空间this_thread 299
42.2.7 杀死thread 300
42.2.8 thread_local数据 300
42.3 避免数据竞争 302
42.3.1 互斥量 302
42.3.2 多重锁 309
42.3.3 call_once() 311
42.3.4 条件变量 311
42.4 基于任务的并发 315
42.4.1 future和promise 316
42.4.2 promise 317
42.4.3 packaged_task 318
42.4.4 future 320
42.4.5 shared_future 323
42.4.6 async() 323
42.4.7 一个并行find()示例 325
42.5 建议 328
第43章 C标准库 330
43.1 引言 330
43.2 文件 330
43.3 printf()系列函数 331
43.4 C风格字符串 334
43.5 内存 335
43.6 日期和时间 336
43.7 杂项 339
43.8 建议 340
第44章 兼容性 341
44.1 引言 341
44.2 C++11扩展 341
44.2.1 语言特性 341
44.2.2 标准库组件 343
44.2.3 弃用特性 344
44.2.4 应对旧版本C++实现 344
44.3 C/C++兼容性 345
44.3.1 C和C++是兄弟 345
44.3.2 “静默”差异 346
44.3.3 不兼容C++的C代码 347
44.3.4 不兼容C的C++代码 350
44.4 建议 351
前言
出版者的话
文艺复兴以来,源远流长的科学精神和逐步形成的学术规范,使西方国家在自然科学的各个领域取得了垄断性的优势;也正是这样的优势,使美国在信息技术发展的六十多年间名家辈出、独领风骚。在商业化的进程中,美国的产业界与教育界越来越紧密地结合,计算机学科中的许多泰山北斗同时身处科研和教学的最前线,由此而产生的经典科学著作,不仅擘划了研究的范畴,还揭示了学术的源变,既遵循学术规范,又自有学者个性,其价值并不会因年月的流逝而减退。
近年,在全球信息化大潮的推动下,我国的计算机产业发展迅猛,对专业人才的需求日益迫切。这对计算机教育界和出版界都既是机遇,也是挑战;而专业教材的建设在教育战略上显得举足轻重。在我国信息技术发展时间较短的现状下,美国等发达国家在其计算机科学发展的几十年间积淀和发展的经典教材仍有许多值得借鉴之处。因此,引进一批国外优秀计算机教材将对我国计算机教育事业的发展起到积极的推动作用,也是与世界接轨、建设真正的世界一流大学的必由之路。
机械工业出版社华章公司较早意识到“出版要为教育服务”。自1998年开始,我们就将工作重点放在了遴选、移译国外优秀教材上。经过多年的不懈努力,我们与Pearson,McGraw-Hill,Elsevier,MIT,John Wiley & Sons,Cengage等世界著名出版公司建立了良好的合作关系,从他们现有的数百种教材中甄选出Andrew S. Tanenbaum,Bjarne Stroustrup,Brian W. Kernighan,Dennis Ritchie,Jim Gray,Afred V. Aho,John E. Hopcroft,Jeffrey D. Ullman,Abraham Silberschatz,William Stallings,Donald E. Knuth,John L. Hennessy,Larry L. Peterson等大师名家的一批经典作品,以“计算机科学丛书”为总称出版,供读者学习、研究及珍藏。大理石纹理的封面,也正体现了这套丛书的品位和格调。
“计算机科学丛书”的出版工作得到了国内外学者的鼎力相助,国内的专家不仅提供了中肯的选题指导,还不辞劳苦地担任了翻译和审校的工作;而原书的作者也相当关注其作品在中国的传播,有的还专门为其书的中译本作序。迄今,“计算机科学丛书”已经出版了近两百个品种,这些书籍在读者中树立了良好的口碑,并被许多高校采用为正式教材和参考书籍。其影印版“经典原版书库”作为姊妹篇也被越来越多实施双语教学的学校所采用。
权威的作者、经典的教材、一流的译者、严格的审校、精细的编辑,这些因素使我们的图书有了质量的保证。随着计算机科学与技术专业学科建设的不断完善和教材改革的逐渐深化,教育界对国外计算机教材的需求和应用都将步入一个新的阶段,我们的目标是尽善尽美,而反馈的意见正是我们达到这一终极目标的重要帮助。华章公司欢迎老师和读者对我们的工作提出建议或给予指正,我们的联系方法如下:
华章网站:www.hzbook.com
电子邮件:hzjsj@hzbook.com
联系电话:(010)88379604
联系地址:北京市西城区百万庄南街1号
邮政编码:100037