C++程序设计语言
新华书店全新正版,极速发货,假一罚十,可开电子发票,请放心购买。
¥
47.91
5.4折
¥
89
全新
库存26件
作者(美)本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup) 著;王刚,杨巨峰 译
出版社机械工业出版社
ISBN9787111544395
出版时间2016-08
装帧平装
开本16开
定价89元
货号1201381745
上书时间2024-10-12
商品详情
- 品相描述:全新
- 商品描述
-
作者简介
本贾尼`斯特劳斯特鲁普(Bjarne Stroustrup),C++语言的设计者和很初实现者,C++语言ISO标准化工作的积极参与者,同时也是《C++程序设计语言》和《C++程序设计原理与实践》的作者。他是英国剑桥大学计算机科学专业博士,1 979年加入美国新泽西贝尔实验室,从成立到2002年一直担任贝尔实验室大规模程序设计研究部门的负责人。2002年至2014年,Bjarne被评为德州农工大学工程学院计算机科学首席教授,哥伦比亚大学计算机科学系客座教授,德州农工大学计算机科学系杰出研究教授。多年来,他为剑桥大学、哥伦比亚大学和普林斯顿大学等知名学府的计算机科学教学事业倾注了大量的热情和精力。商业领域方面,Bjarne是RollApp科技公司的资历顾问。2014年,Bjame加入摩根士丹利纽约总部,任职技术与数据部门的董事总经理。他是美国国家工程院院士、IEEE会士和ACM会士,研究兴趣包括分布式系统、设计、程序设计技术、软件开发工具和程序设计语言。
目录
出版者的话
译者序
前言
第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.1initializer_list支持9
30.3.2范围for支持10
30.4错误处理10
30.4.1异常10
30.4.2断言14
30.4.3system_error15
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.1vector38
31.4.2链表42
31.4.3关联容器44
31.5容器适配器53
31.5.1stack54
31.5.2queue55
31.5.3priority_queue56
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.1for_each()63
32.4.2序列谓词63
32.4.3count()63
32.4.4find()64
32.4.5equal()和mismatch()64
32.4.6search()65
32.5修改序列的算法66
32.5.1copy()66
32.5.2unique()67
32.5.3remove()和replace()68
32.5.4rotate()、random_shuffle()和partition()69
32.5.5排列70
32.5.6fill()70
32.5.7swap()71
32.6排序和搜索71
32.6.1二分搜索74
32.6.2merge()75
32.6.3集合算法75
32.6.4堆76
32.6.5lexicographical_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.1bind()92
33.5.2mem_fn()93
33.5.3function93
33.6建议95
第34章内存和资源96
34.1引言96
34.2“拟容器”96
34.2.1array97
34.2.2bitset99
34.2.3vector<bool>103
34.2.4元组104
34.3资源管理指针107
34.3.1unique_ptr108
34.3.2shared_ptr111
34.3.3weak_ptr113
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.2raw_storage_iterator124
34.7建议125
第35章工具126
35.1引言126
35.2时间126
35.2.1duration127
35.2.2time_point129
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.1move()和forward()142
35.5.2swap()143
35.5.3关系运算符143
35.5.4比较和哈希type_info144
35.6建议145
第36章字符串146
36.1引言146
36.2字符分类146
36.2.1分类函数146
36.2.2字符萃取147
36.3字符串148
36.3.1string与C风格字符串149
36.3.2构造函数151
36.3.3基本操作152
36.3.4字符串I/O153
36.3.5数值转换154
36.3.6类STL操作155
36.3.7find系列函数157
36.3.8子串158
36.4建议159
第37章正则表达式160
37.1正则表达式160
37.1.1正则表达式符号表示161
37.2regex165
37.2.1匹配结果166
37.2.2格式化169
37.3正则表达式函数170
37.3.1regex_match()170
37.3.2regex_search()171
37.3.3regex_replace()172
37.4正则表达式迭代器173
37.4.1regex_iterator173
37.4.2regex_token_iterator175
37.5regex_traits176
37.6建议177
第38章I/O流178
38.1引言178
38.2I/O流层次180
38.2.1文件流180
38.2.2字符串流182
38.3错误处理183
38.4I/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类locale211
39.2.1命名locale213
39.2.2比较string216
39.3类facet217
39.3.1访问locale中的facet218
39.3.2一个简单的用户自定义facet218
39.3.3locale和facet的使用221
39.4标准facet221
39.4.1string比较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复数complex257
40.5数值数组:valarray258
40.5.1构造函数和赋值操作258
40.5.2下标操作260
40.5.3运算261
40.5.4切片263
40.5.5slice_array265
40.5.6推广切片265
40.6推广数值算法267
40.6.1accumulate()267
40.6.2inner_product()268
40.6.3partial_sum()和adjacent_difference()269
40.6.4iota()270
40.7随机数270
40.7.1引擎272
40.7.2随机设备274
40.7.3分布274
40.7.4C风格随机数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.1atomic类型287
41.3.2标志和栅栏291
41.4volatile292
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.4join()297
42.2.5detach()298
42.2.6名字空间this_thread299
42.2.7杀死thread300
42.2.8thread_local数据300
42.3避免数据竞争302
42.3.1互斥量302
42.3.2多重锁309
42.3.3call_once()311
42.3.4条件变量311
42.4基于任务的并发315
42.4.1future和promise316
42.4.2promise317
42.4.3packaged_task318
42.4.4future320
42.4.5shared_future323
42.4.6async()323
42.4.7一个并行find()示例325
42.5建议328
第43章C标准库330
43.1引言330
43.2文件330
43.3printf()系列函数331
43.4C风格字符串334
43.5内存335
43.6日期和时间336
43.7杂项339
43.8建议340
第44章兼容性341
44.1引言341
44.2C++11扩展341
44.2.1语言特性341
44.2.2标准库组件343
44.2.3弃用特性344
44.2.4应对旧版本C++实现344
44.3C/C++兼容性345
44.3.1C和C++是兄弟345
44.3.2“静默”差异346
44.3.3不兼容C++的C代码347
44.3.4不兼容C的C++代码350
44.4建议351
内容摘要
《C++程序设计语言》(原书第4版)是C++领域很经典的参考书,介绍了C++11的各项新特性和新功能。全书共分四部分。靠前部分(靠前~5章)是引言,包括C++的背景知识,C++语言及其标准库的简要介绍;第二部分(第6~15章)介绍C++的内置类型和基本特性,以及如何用它们构造程序;第三部分(靠前6~29章)介绍C++的抽象机制及如何用这些机制编写面向对象程序和泛型程序;第四部分(第30~44章)概述标准库并讨论一些兼容性问题。由于篇幅问题,原书中文版分两册出版,分别对应原书的靠前至三部分和第四部分。这一册为第四部分。
精彩内容
前 言The C++ Programming Language, Fourth Edition所有计算机科学问题,都可以通过引入一个新的间接层次来解决,那些已有过多间接层次的问题除外。
——David J. Wheeler与C++98标准相比,C++11标准让我可以更清晰、更简洁而且更直接地表达自己的想法。而且,新版本的编译器可以对程序进行更好的检查并生成更快的目标程序。因此,C++11给人的感觉就像是一种新语言一样。
在本书中,我追求完整性(completeness)。我会介绍专业程序员可能需要的每个语言特性和标准库组件。对每个特性或组件,我将给出:
基本原理:设计这个特性(组件)是为了帮助解决哪类问题?其设计原理是什么?它有什么根本的局限?规范:它该如何定义?我将以专业程序员为目标读者来选择内容的详略程度,对于要求更高的C++语言研究者,有很多ISO标准的文献可供查阅。
例子:当单独使用这个特性或与其他特性组合使用时,如何用好它?其中的关键技术和习惯用法是怎样的?在程序的可维护性和性能方面是否有一些隐含的问题?多年来,无论是C++语言本身还是它的使用,都已经发生了巨大改变。从程序员的角度,大多数改变都属于语言的改进。与之前的版本相比,当前的ISO C++标准(ISO/IEC 14882-2011,通常称为C++11)在编写高质量代码方面无疑是一个好得多的工具。但是它好在哪里?现代C++语言支持什么样的程序设计风格和技术?这些技术靠哪些语言特性和标准库特性来支撑?精练、正确、可维护性好、性能高的C++代码的基本构建单元是怎样的?本书将回答这些关键问题。很多答案已经不同于1985、1995或2005等旧版本的C++语言了:C++在进步。
C++是一种通用程序设计语言,它强调富类型、轻量级抽象的设计和使用。C++特别适合开发资源受限的应用,例如可在软件基础设施中发现的那些应用。那些花费时间学习高质量代码编写技术的程序员将会从C++语言受益良多。C++是为那些严肃对待编程的人而设计的。人类文明已经严重依赖软件,编写高质量的软件很好重要。
目前已经部署的C++代码达到数十亿行,因此程序稳定性备受重视——很多1985年和1995年编写的C++代码仍然运行良好,而且还会继续运行几十年。但是,对所有这些应用程序,都可以用现代C++语言写出更好的版本;如果你墨守成规,将来写出的代码将会是低质量、低性能的。对稳定性的强调还意味着,你现在遵循标准写出的代码,在未来几十年中会运行良好。本书中所有代码都遵循2011 ISO C++标准。
本书面向三类读者:
想知道近期新的ISO C++标准都提供了哪些新特性的C++程序员。
好奇C++到底提供了哪些超越C语言的特性的C程序员。
具备Java、C#、Python和Ruby等编程语言背景,正在探寻“更接近机器”的语言,即更灵活、提供更好的编译时检查或是更好性能的语言的程序员。
自然,这三类读者可能是有交集的——一个专业软件开发者通常掌握多门编程语言。
本书假定目标读者是程序员。如果你想问“什么是for循环?”或是“什么是编译器?”,那么本书现在还不适合你,我向你推荐我的另一本书《C++程序设计原理与实践》,这本书适合作为程序设计和C++语言的入门书籍。而且,我假定读者是较为成熟的软件开发者。如果你的问题是“为什么要费力进行测试?”或者认为“所有语言基本都是一样的,给我看语法就可以了”,甚至确信存在一种适合所有任务的完美语言,那么本书也不适合你。
相对于C++98,C++11提出了哪些改进和新特性呢?适合现代计算机的机器模型会涉及大量并发处理。为此,C++11提供了用于系统级并行编程(如使用多核)的语言和标准库特性。C++11还提供了正则表达式处理、资源管理指针、随机数、改进的容器(包括哈希表)以及其他很多特性。此外,C++11还提供了通用和一致的初始化机制、更简单的for语句、移动语义、基础的Unicode支持、lambda表达式、通用常量表达式、控制类缺省定义的能力、可变参数模板、用户定义的字面值常量和其他很多新特性。请记住,这些标准库和语言特性的目标就是支撑那些用来开发高质量软件的程序设计技术。这些特性应该组合使用——将它们看作盖大楼的砖,而不应该相互隔离地单独使用来解决特定问题。计算机是一种通用机器,而C++在其中起着重要作用。特别是,C++的设计目标就是足够灵活和通用,以便处理那些连它的设计者都未曾想象过的未来难题。
致谢除了本书上一版致谢提及的人之外,我还要感谢Pete Becker、Hans-J. Boehm、Marshall Clow、Jonathan Coe、Lawrence Crowl、Walter Daugherty、J. Daniel Garcia、Robert Harle、Greg Hickman、Howard Hinnant、Brian Kernighan、Daniel Krügler、Nevin Liber、Michel Michaud、Gary Powell、Jan Christiaan van Winkel和Leor Zolman。没有他们的帮助,本书的质量要差得多。
感谢Howard Hinnant为我解答很多有关标准库的问题。
Andrew Sutton是Origin库的作者,模板相关章节中很多模拟概念的讨论都是基于这个测试平台的。他还是Matrix库的作者,这是第29章的主题。Origin库是开源的,在互联网上搜索“Origin”和“Andrew Sutton”就能找到。
感谢我指导的毕业设计班,他们从第一部分中找出的问题比其他任何人都多。
假如我能遵照审阅人的所有建议,毫无疑问会大幅度提高本书的质量,但篇幅上也会增加数百页。每个专家审阅人都建议增加技术细节、进阶示例和很多有用的开发规范;每个新手审阅人(或教育工作者)都建议增加示例;而大多数审阅人都(正确地)注意到本书的篇幅可能过长了。
感谢普林斯顿大学计算机科学系,特别感谢Brian Kernighan教授,在我利用部分休假时间撰写此书时给予我热情接待。
感谢剑桥大学计算机实验室,特别感谢Andy Hopper教授,在我利用部分休假时间撰写此书时给予我热情接待。
感谢编辑Peter Gordon以及他在Addison-Wesley的出版团队,感谢你们的帮助和耐心。
Bjarne Stroustrup于得克萨斯大学城第3版前言The C++ Programming Language, Fourth Edition去编程就是去理解。
——Kristen Nygaard我觉得用C++编程比以往更令人愉快。在过去这些年里,C++在支持设计和编程方面取得了令人振奋的进步,针对其使用的大量新技术已经被开发出来了。然而,C++并不只是好玩。普通的程序员在几乎所有种类和规模的开发项目上,在生产率、可维护性、灵活性和质量方面都取得了显著的进步。到今天为止,C++已经实现了我当初期望中的绝大部分,还在许多我原来根本没有梦想过的工作中取得了成功。
本书介绍的是标准C++以及由C++所支持的关键编程技术和设计技术。与本书第1版所介绍的那个C++版本相比,标准C++是一个经过了更仔细推敲的更强大的语言。各种新的语言特征,如名字空间、异常、模板,以及运行时类型识别,使人能以比过去更直接的方式使用许多技术,标准库使程序员能够从比基本语言高得
— 没有更多了 —
以下为对购买帮助不大的评价