作品介绍

C++标准程序库


作者:[德]NicolaiM.Josuttis     整理日期:2017-03-10 10:39:49


  这本包含最新资料的完整书籍,反映出被ANSI/ISO C++语言标准规格书纳入的C++标准程序库的最新组成。更明确地说,这本书将焦点放在标准模板库身上,检验其中的容器、迭代器、仿函数和算法。读者还可以找到特殊容、字串、数值类别、国际化议题、IOStream。每一个元素都有深刻的呈现,包括其介绍、设计、运用实例、细部解说、陷阱、意想不到的危险,以及相关类别和函数的精确樯记式和定义式。

作者简介
  Nicolai M.Josuttis,著有《C++标准库》和《C++模板》,两书都由Addison-Wesley出版。他的职务是系统架构师和技术经理。最近两年,他在一家国际电话公司中全面推广SOA。Nicolai在几个会议上办过SOA讲座,多年来他一直在发表关于这个主题的演讲。
  侯俊杰(1961年9月28日-),笔名侯捷,台湾知名电脑技术专栏作家,致力于电脑技术之扎根工作,文章兼具科技之长与灵性之美[1],有读者的评语是“比作家更工程师,比工程师更作家”。大同国中、师大附中、交通大学土木系毕业、清华大学动力机械研究所硕士。曾任职工研院机械所与电通所,曾在元智大学授课,近年来多从事两岸学术交流工作。他的妻子美静是一名钢琴师,侯俊杰说他自己“嗜咖啡。妻严不能常得。”

目录:

目录
  侯捷译序a
  孟岩译序g

目录(contents) v
  前言(preface) xvii
  致谢(acknowledgments) xix
  1 关于本书1
  1.1 缘起1
  1.2 阅读前的必要基础2
  1.3 本书风格与结构2
  1.4 如何阅读本书4
  1.5 目前发展形式5
  1.6 范例程序代码及额外信息5
  1.7 回应5
  2 c++ 及其标准程序库简介7
  2.1 沿革7
  2.2 新的语言特性9
  2.2.1 templates(模板) 9
  2.2.2 基本型别的显式初始化(explicit initialization) 14
  2.2.3 异常处理(exception handling) 15
  .2.2.4 命名空间(namespaces) 16
  2.2.5 bool型别18
  2.2.6 关键词explicit 18
  2.2.7 新的型别转换操作符(type conversion operators) 19
  2.2.8 常数静态成员(constant static members)的初始化20
  2.2.9 main() 的定义21
  2.3 复杂度和big-o 表示法21
  3 一般概念(general concepts) 23
  3.1 命名空间(namespace)std 23
  3.2 头文件(header files) 24
  3.3 错误(error)处理和异常(exception)处理25
  3.3.1 标准异常类别(standard exception classes) 25
  3.3.2 异常类别(exception classes)的成员28
  3.3.3 抛出标准异常29
  3.3.4 从标准异常类别(exception classes)中派生新的类别30
  3.4 配置器(allocators) 31
  4 通用工具(utilities) 33
  4.1 pairs(对组) 33
  4.1.1 便捷函数make_pair() 36
  4.1.2 pair运用实例37
  4.2 class auto_ptr 38
  4.2.1 auto_ptr的发展动机38
  4.2.2 auto_ptr拥有权(ownership)的转移40
  4.2.3 auto_ptrs 做为成员之一44
  4.2.4 auto_ptrs 的错误运用46
  4.2.5 auto_ptr运用实例47
  4.2.6 auto_ptr实作细目51
  4.3 数值极限(numeric limits) 59
  4.4 辅助函数66
  4.4.1 挑选较小值和较大值66
  4.4.2 两值互换67
  4.5 辅助性的“比较操作符”(comparison operators) 69
  4.6 头文件[cstddef] 和[cstdlib] 71
  4.6.1 [cstddef] 内的各种定义71
  4.6.2 [cstdlib] 内的各种定义71
  5 standard template library(标准模板库) 73
  5.1 stl 组件(stl components) 73
  5.2 容器(containers) 75
  5.2.1 序列式容器(sequence containers) 76
  5.2.2 关联式容器(associative containers) 81
  5.2.3 容器配接器(container adapters) 82
  5.3 迭代器(iterators) 83
  5.3.1 关联式容器的运用实例86
  5.3.2 迭代器类型(iterator categories) 93
  5.4 算法(algorithms) 94
  5.4.1 区间(ranges) 97
  5.4.2 处理多个区间101
  5.5 迭代器之配接器(iterator adapters) 104
  5.5.1 insert iterators(安插型迭代器) 104
  5.5.2 stream iterators(串流迭代器) 107
  5.5.3 reverse iterators(逆向迭代器) 109
  5.6 更易型算法(manipulating algorithms) 111
  5.6.1 移除(removing)元素111
  5.6.2 更易型算法和关联式容器115
  5.6.3 算法v.s. 成员函数116
  5.7 使用者自定之泛型函数(user-defined generic functions) 117
  5.8 以函数做为算法的参数119
  5.8.1“以函数做为算法的参数”实例示范119
  5.8.2 判断式(predicates) 121
  5.9 仿函数(functors or function objects) 124
  5.9.1 什么是仿函数124
  5.9.2 预先定义的仿函数131
  5.10 容器内的元素(container elements) 134
  5.10.1 容器元素的条件134
  5.10.2 value 语意vs. reference 语意135
  5.11 stl内部的错误处理和异常处理136
  5.11.1 错误处理(error handling) 137
  5.11.2 异常处理(exception handling) 139
  5.12 扩展stl 141
  6 stl 容器(containers) 143
  6.1 容器的共通能力和共通操作144
  6.1.1 容器的共通能力144
  6.1.2 容器的共通操作144
  6.2 vectors 148
  6.2.1 vectors 的能力148
  6.2.2 vector 的操作函数150
  6.2.3 将vectors 当做一般arrays 使用155
  6.2.4 异常处理155
  6.2.5 vectors 运用实例156
  6.2.6 class vector[bool] 158
  6.3 deques 160
  6.3.1 deques 的能力161
  6.3.2 deque 的操作函数162
  6.3.3 异常处理(exception handling) 164
  6.3.4 deques 运用实例164
  6.4 lists 166
  6.4.1 lists 的能力166
  6.4.2 list 的操作函数167
  6.4.3 异常处理(exception handling) 172
  6.4.4 lists 运用实例172
  6.5 sets和multisets
  175
  6.5.1 sets 和multisets 的能力176
  6.5.2 set 和multiset 的操作177
  6.5.3 异常处理(exception handling) 185
  6.5.4 sets 和multisets 运用实例186
  6.5.5 执行期指定排序准则(sorting criterion) 191
  6.6 maps 和multimaps 194
  6.6.1 maps 和multimaps 的能力195
  6.6.2 map 和multimap 的操作函数196
  6.6.3 将maps 视为关联式数组(associated arrays) 205
  6.6.4 异常处理(exception handling) 207
  6.6.5 maps 和multimaps 运用实例207
  6.6.6 综合实例:运用maps, strings 并于执行期指定排序准则213
  6.7 其它的stl容器217
  6.7.1 strings 可被视为一种stl容器217
  6.7.2 arrays 可被视为一种stl容器218
  6.7.3 hash tables 221
  6.8 动手实现reference 语意222
  6.9 各种容器的运用时机226
  6.10 细说容器内的型别和成员230
  6.10.1 容器内的型别230
  6.10.2 生成(create)、复制(copy)、销毁(destroy) 231
  6.10.3“非变动性操作(nonmodifying operations) 233
  6.10.4 赋值(指派, assignments) 236
  6.10.5 直接元素存取237
  6.10.6 “会产出迭代器”的各项操作239
  6.10.7 元素的安插(inserting)和移除(removing) 240
  6.10.8 lists 的特殊成员函数244
  6.10.9 对配置器(allocator)的支持246
  6.10.10 综观stl容器的异常处理248
  7 stl 迭代器(iterators) 251
  7.1 迭代器头文件251
  7.2 迭代器类型(iterator categories) 251
  7.2.1 input(输入)迭代器252
  7.2.2 output(输出)迭代器253
  7.2.3 forward(前向)迭代器254
  7.2.4 bidirectional(双向)迭代器255
  7.2.5 random access(随机存取)迭代器255
  7.2.6 vector 迭代器的递增(increment)和递减(decrement) 258
  7.3 迭代器相关辅助函数259
  7.3.1 advance() 可令迭代器前进259
  7.3.2 distance() 可处理迭代器之间的距离261
  7.3.3 iter_swap() 可交换两个迭代器所指内容263
  7.4 迭代器配接器(iterator adapters) 264
  7.4.1 reverse(逆向)迭代器264
  7.4.2 insert(安插型)迭代器271
  7.4.3 stream(串流)迭代器277
  7.5 迭代器特性(iterator traits) 283
  7.5.1 为迭代器编写泛型函数(generic functions) 285
  7.5.2 使用者自定(user-defined)的迭代器288
  8 stl 仿函数(functors or function objects) 293
  8.1 仿函数的概念293
  8.1.1 仿函数可当做排序准则(sort criteria) 294
  8.1.2 仿函数可拥有自己的内部状态(internal state) 296
  8.1.3 for_each() 的回返值300
  8.1.4 判断式(predicates)和仿函数(functors) 302
  8.2 预定义的仿函数305
  8.2.1 函数配接器(function adapters) 306
  8.2.2 针对成员函数而设计的函数配接器307
  8.2.3 针对一般函数(非成员函数)而设计的函数配接器309
  8.2.4 让自定仿函数也可以使用函数配接器310
  8.3 辅助用(组合型)仿函数313
  8.3.1 一元组合函数配接器(unary compose function object adapters) 314
  8.3.2 二元组合函数配接器(binary compose function object adapters) 318
  9 stl 算法(algorithms) 321
  9.1 算法头文件(header files) 321
  9.2 算法概观322
  9.2.1 简介322
  9.2.2 算法分门别类323
  9.3 辅助函数332
  9.4 for_each() 算法334
  9.5 非变动性算法(nonmodifying algorithms) 338
  9.5.1 计算元素个数338
  9.5.2 求最大值和最小值339
  9.5.3 搜寻元素341
  9.5.4 区间的比较356
  9.6 变动性算法(modifying algorithms) 363
  9.6.1 复制(copying)元素363
  9.6.2 转换(transforming)和结合(combining)元素366
  9.6.3 互换(swapping)元素内容370
  9.6.4 赋予(assigning)新值372
  9.6.5 替换(replacing)元素375
  9.7 移除性算法(removing algorithms) 378
  9.7.1 移除某些特定元素378
  9.7.2 移除重复元素381
  9.8 变序性算法(mutating algorithms) 386
  9.8.1 逆转(reversing)元素次序386
  9.8.2 旋转(rotating)元素次序388
  9.8.3 排列(permuting)元素391
  9.8.4 重排元素(shuffling, 搅乱次序) 393
  9.8.5 将元素向前搬移395
  9.9 排序算法(sorting algorithms) 397
  9.9.1 对所有元素排序397
  9.9.2 局部排序(partial sorting) 400
  9.9.3 根据第n 个元素排序404
  9.9.4 heap 算法406
  9.10 已序区间算法(sorted range algorithms) 409
  9.10.1 搜寻元素(searching) 410
  9.10.2 合并元素(merging) 416
  9.11 数值算法(numeric algorithms) 425
  9.11.1 加工运算后产生结果425
  9.11.2 相对值和绝对值之间的转换429
  10 特殊容器(special containers) 435
  10.1 stacks(堆栈) 435
  10.1.1 核心界面436
  10.1.2 stacks 运用实例437
  10.1.3 class stack[] 细部讨论438
  10.1.4 一个使用者自定的stack class 441
  10.2 queues(队列) 444
  10.2.1 核心界面445
  10.2.2 queues 运用实例446
  10.2.3 class queue[] 细部讨论447
  10.2.4 一个使用者自定的queue class 450
  10.3 priority queues(优先队列) 453
  10.3.1 核心界面455
  10.3.2 priority queues 运用实例455
  10.3.3 class priority_queue[] 细部讨论456
  10.4 bitsets 460
  10.4.1 bitsets 运用实例460
  10.4.2 class bitset 细部讨论463
  11 strings(字符串) 471
  11.1 动机471
  11.1.1 例一:引出一个临时文件名
  472
  11.1.2 例二:引出一段文字并逆向打印476
  11.2 string classes 细部描述479
  11.2.1 string 的各种相关型别479
  11.2.2 操作函数(operations)综览481
  11.2.3 建构式和解构式(constructors and destructors) 483
  11.2.4 strings 和c-strings 484
  11.2.5 大小(size)和容量(capacity) 485
  11.2.6 元素存取(element access) 487
  11.2.7 比较(comparisons) 488
  11.2.8 更改内容(modifiers) 489
  11.2.9 子字符串及字符串接合492
  11.2.10 i/o 操作符492
  11.2.11 搜寻和查找(searching and finding) 493
  11.2.12 数值npos 的意义495
  11.2.13 strings 对迭代器的支援497
  11.2.14 国际化(internationalization) 503
  11.2.15 效率(performance) 506
  11.2.16 strings 和vectors 506
  11.3 细说string class 507
  11.3.1 内部的型别定义和静态值507
  11.3.2 生成(create)、拷贝(copy)、销毁(destroy) 508
  11.3.3 大小(size)和容量(capacity) 510
  11.3.4 比较(comparisons) 511
  11.3.5 字符存取(character access) 512
  11.3.6 产生c-strings 和字符数组(character arrays) 513
  11.3.7 更改内容514
  11.3.8 搜寻(searching and finding) 520
  11.3.9 子字符串及字符串接合524
  11.3.10 i/o 函数524
  11.3.11 产生迭代器525
  11.3.12 对配置器(allocator)的支持526
  12 数值(numerics) 529
  12.1 复数(complex numbers) 529
  12.1.1 class complex运用实例530
  12.1.2 复数的各种操作533
  12.1.3 class complex[] 细部讨论541
  12.2 valarrays 547
  12.2.1 认识valarrays 547
  12.2.2 valarray 的子集(subsets) 553
  12.2.3 class valarray 细部讨论569
  12.2.4 valarray子集类别(subset classes)细部讨论575
  12.3 全域性的数值函数581
  13 以stream classes完成输入和输出583
  13.1 i/o streams 基本概念584
  13.1.1 stream物件584
  13.1.2 stream类别584
  13.1.3 全域性的stream物件585
  13.1.4 stream操作符586
  13.1.5 操控器(manipulators) 586
  13.1.6 一个简单的例子587
  13.2 基本的stream类别和stream对象588
  13.2.1 相关类别及其阶层体系588
  13.2.2 全域性的stream物件591
  13.2.3 头文件(headers) 592
  13.3 标准的stream操作符[[ 和]] 593
  13.3.1 output操作符[[ 593
  13.3.2 input操作符]] 594
  13.3.3 特殊型别的i/o 595
  13.4 streams 的状态(state) 597
  13.4.1 用来表示streams 状态的一些常数597
  13.4.2 用来处理streams 状态的一些成员函数598
  13.4.3 stream状态与布尔条件测试600
  13.4.4 stream的状态和异常602
  13.5 标准i/o 函数607
  13.5.1 输入用的成员函数607
  13.5.2 输出用的成员函数610
  13.5.3 运用实例611
  13.6 操控器(manipulators) 612
  13.6.1 操控器如何运作612
  13.6.2 使用者自定操控器614
  13.7 格式化(formatting) 615
  13.7.1 格式标志(format flags) 615
  13.7.2 布尔值(boolean values)的i/o 格式617
  13.7.3 字段宽度、填充字符、位置调整618
  13.7.4 正记号与大写字620
  13.7.5 数值进制(numeric base) 621
  13.7.6 浮点数(floating-point)表示法623
  13.7.7 一般性的格式定义625
  13.8 国际化(internationalization) 625
  13.9 文件存取(file access) 627
  13.9.1 文件标志(file flags) 631
  13.9.2 随机存取634
  13.9.3 使用文件描述器(file descriptors) 637
  13.10 连接input streams 和output streams 637
  13.10.1 以tie()完成“松耦合”(loose coupling) 637
  13.10.2 以stream缓冲区完成“紧耦合”(tight coupling) 638
  13.10.3 将标准streams 重新导向(redirecting) 641
  13.10.4 用于读写的streams 643
  13.11 string stream classes 645
  13.11.1 string stream classes 645
  13.11.2 char* stream classes 649
  13.12 “使用者自定型别”之i/o操作符652
  13.12.1 实作一个output 操作符652
  13.12.2 实作一个input 操作符654
  13.12.3 以辅助函数完成i/o 656
  13.12.4 以非格式化函数完成使用者自定的操作符658
  13.12.5 使用者自定的格式标志(format flags) 659
  13.12.6 使用者自定之i/o 操作符的数个依循惯例662
  13.13 stream buffer classes 663
  13.13.1 从使用者的角度看stream缓冲区663
  13.13.2 stream缓冲区迭代器(buffer iterators) 665
  13.13.3 使用者自定的stream 缓冲区668
  13.14 关于效能(performance) 681
  13.14.1 与c 标准输入输出流(standard streams)同步682
  13.14.2 stream缓冲区内的缓冲机制682
  13.14.3 直接使用stream缓冲区683
  14 国际化(internationalization, i18n) 685
  14.1 不同的字符编码(character encoding) 686
  14.1.1 宽字符(wide-character)和多字节文本(multibyte text) 686
  14.1.2 字符特性(character traits) 687
  14.1.3 特殊字符国际化691
  14.2 locales 的概念692
  14.2.1 运用locales 693
  14.2.2 locale facets 698
  14.3 locales 细部讨论700
  14.4 facets 细部讨论704
  14.4.1 数值格式化705
  14.4.2 时间和日期格式化708
  14.4.3 货币符号格式化711
  14.4.4 字符的分类和转换715
  14.4.5 字符串校勘(string collation) 724
  14.4.6 信息国际化725
  15 空间配置器(allocators) 727
  15.1 应用程序开发者如何使用配置器727
  15.2 程序库开发者如何使用配置器728
  15.3 c++ 标准程序库的预设配置器732
  15.4 使用者自行定义的配置器735
  15.5 配置器细部讨论737
  15.5.1 内部定义的型别737
  15.5.2 各项操作739
  15.6“未初始化内存”之处理工具细部讨论740
  网络上的资源(internet resources) 743
  参考书目(bibliography) 745
  索引(index) 747





上一本:魔法师·大师 下一本:草原动物园

作家文集

下载说明
C++标准程序库的作者是[德]NicolaiM.Josuttis,全书语言优美,行文流畅,内容丰富生动引人入胜。为表示对作者的支持,建议在阅读电子书的同时,购买纸质书。

更多好书