目錄
侯捷譯序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
· · · · · · (
收起)