C++程序設計語言 第4版 上下冊
Bjarne Stroustrup
- 出版商: 人民郵電
- 出版日期: 2026-01-01
- 售價: $1,500
- 語言: 簡體中文
- ISBN: 7115666148
- ISBN-13: 9787115666147
-
相關分類:
C++ 程式語言
- 此書翻譯自: The C++ Programming Language, 4/e (Paperback)
-
相關翻譯:
The C++ Programming Language, 4/e (國際中文版)(The C++ Programming Language, 4/e) (繁中版)
尚未上市,歡迎預購
相關主題
商品描述
C++是一種通用程序設計語言。本書*介紹C++11標準,涵蓋了C++的發展歷程、設計理念、學習方法及新特性等內容。第1篇(第1~5章)包括C++的背景知識、C++語言及其標準庫的簡要介紹;第2篇(第6~15章)介紹C++的內置類型、基本特性及如何用它們構造程序;第3篇(第16~29章)介紹C++的抽象機制及如何用這些機制編寫面向對象程序和泛型程序;第4篇(第30~44章)概述標準庫並討論一些兼容性問題。本書從基本原理、規範等方面充分講解C++的語言特性和標準庫組件,並給出豐富的例子,為專業程序員提供*的C++知識體系。 本書可作為高等院校編程語言和C++相關課程的教材,也適合C++程序設計人員閱讀。
作者簡介
比亞內?斯特勞斯特魯普(Bjarne Stroustrup),C++ 語言的設計者和*初實現者,《C++ 程序設計語言》及《C++ 程序設計原理與實踐》等多部圖書作者。曾任職於貝爾實驗室、美國電話電報公司 (AT&T) 研究實驗室、得克薩斯農工大學及摩根士丹利紐約總部,於 2022 年退休。 Stroustrup 曾榮獲多項榮譽,包括 2018 年美國國家工程院查爾斯?斯塔克?德雷珀獎,以表彰他 “對 C++ 語言的構思與開發”。此外,Stroustrup 還是美國國家工程院院士、AT&T 會士、AT&T 貝爾實驗室會士、電氣電子工程師學會 (IEEE) 會士以及美國計算機協會 (ACM) 會士,並於 2013 年入選《電子設計》雜誌的工程名人堂。 Stroustrup 的研究領域包括分布式系統、仿真、設計、編程技術、軟件開發工具和編程語言等,同時積極參與 C++ 的 ANSI/ISO 標準化工作。 Stroustrup 擁有丹麥奧胡斯大學的碩士學位,以及英國劍橋大學的計算機科學博士學位。
目錄大綱
上冊
第 1篇 引言
第 1章 致讀者 2
1.1 本書結構 2
1.1.1 導言 2
1.1.2 基本特性 3
1.1.3 抽象機制 3
1.1.4 標準庫 4
1.1.5 示例和參考文獻 4
1.2 C++的設計 5
1.2.1 編程風格 6
1.2.2 類型檢查 8
1.2.3 C語言兼容性 9
1.2.4 語言、庫和系統 9
1.3 學習C++ 10
1.3.1 用C++編程 11
1.3.2 對C++程序員的建議 12
1.3.3 對C程序員的建議 12
1.3.4 對Java程序員的建議 13
1.4 C++的發展歷程 14
1.4.1 大事年表 14
1.4.2 早期的C++ 15
1.4.3 1998標準 16
1.4.4 2011標準 17
1.4.5 C++的用途 19
1.5 建議 20
1.6 參考資料 21
第 2章 C++之旅:基礎知識 24
2.1 導言 24
2.2 基礎知識 24
2.2.1 Hello, World! 25
2.2.2 類型、變量和算術運算 26
2.2.3 常量 28
2.2.4 測試和循環 28
2.2.5 指針、數組和循環 29
2.3 用戶自定義類型 31
2.3.1 結構體 31
2.3.2 類 32
2.3.3 枚舉 33
2.4 模塊化 34
2.4.1 單獨編譯 35
2.4.2 命名空間 36
2.4.3 錯誤處理 37
2.5 後記 39
2.6 建議 39
第3章 C++之旅:抽象機制 40
3.1 導言 40
3.2 類 40
3.2.1 具體類型 41
3.2.2 抽象類型 44
3.2.3 虛函數 46
3.2.4 類層次結構 46
3.3 覆制和移動 50
3.3.1 覆制容器 50
3.3.2 移動容器 51
3.3.3 資源管理 53
3.3.4 禁用操作 53
3.4 模板 54
3.4.1 參數化類型 54
3.4.2 函數模板 55
3.4.3 函數對象 56
3.4.4 可變參數模板 58
3.4.5 別名 58
3.5 建議 59
第4章 C++之旅:容器和算法 60
4.1 庫 60
4.1.1 標準庫概述 60
4.1.2 標準庫頭文件和命名空間 61
4.2 字符串 62
4.3 I/O流 63
4.3.1 輸出 63
4.3.2 輸入 64
4.3.3 用戶自定義類型I/O 65
4.4 容器 66
4.4.1 vector 66
4.4.2 list 68
4.4.3 map 69
4.4.4 unordered_map 70
4.4.5 容器概述 70
4.5 算法 71
4.5.1 使用疊代器 72
4.5.2 疊代器類型 73
4.5.3 流疊代器 74
4.5.4 謂詞 75
4.5.5 算法概述 76
4.5.6 容器算法 76
4.6 建議 77
第5章 C++之旅:並發與實用工具 78
5.1 導言 78
5.2 資源管理 78
5.2.1 unique_ptr和shared_ptr 79
5.3 並發處理 80
5.3.1 任務和線程 80
5.3.2 傳遞參數 81
5.3.3 返回結果 82
5.3.4 共享數據 82
5.3.5 任務間通信 84
5.4 小型實用組件 86
5.4.1 時間處理 87
5.4.2 類型函數 87
5.4.3 對組和元組 89
5.5 正則表達式 90
5.6 數值計算 90
5.6.1 數學函數和算法 90
5.6.2 覆數 91
5.6.3 隨機數 91
5.6.4 向量運算 92
5.6.5 數值限制 93
5.7 建議 93
第 2篇 基本特征
第6章 類型和聲明 96
6.1 ISO C++標準 96
6.1.1 實現 97
6.1.2 基本源代碼字符集 97
6.2 類型 97
6.2.1 基本類型 98
6.2.2 布爾類型 98
6.2.3 字符類型 99
6.2.4 整數類型 102
6.2.5 浮點類型 104
6.2.6 前綴和後綴 104
6.2.7 void 105
6.2.8 大小 105
6.2.9 對齊 107
6.3 聲明 107
6.3.1 聲明的結構 109
6.3.2 聲明多個名稱 110
6.3.3 名稱 110
6.3.4 作用域 111
6.3.5 初始化 113
6.3.6 類型推斷:auto和decltype() 116
6.4 對象與值 118
6.4.1 左值與右值 118
6.4.2 對象的生命周期 118
6.5 類型別名 119
6.6 建議 120
第7章 指針、數組與引用 121
7.1 導言 121
7.2 指針 121
7.2.1 void* 122
7.2.2 nullptr 122
7.3 數組 123
7.3.1 數組初始化器 124
7.3.2 字符串字面量 124
7.4 指針與數組 127
7.4.1 訪問數組 127
7.4.2 多維數組 129
7.4.3 傳遞數組 130
7.5 指針與const 131
7.6 指針與所有權 133
7.7 引用 133
7.7.1 左值引用 134
7.7.2 右值引用 137
7.7.3 引用的引用 139
7.7.4 指針與引用 139
7.8 建議 141
第8章 結構體、聯合體與枚舉 142
8.1 導言 142
8.2 結構體 142
8.2.1 struct的布局 143
8.2.2 struct的名稱 144
8.2.3 結構體與類 145
8.2.4 結構體與數組 146
8.2.5 類型等價 148
8.2.6 普通舊數據 149
8.2.7 域 150
8.3 聯合體 151
8.3.1 聯合體與類 152
8.3.2 匿名union 153
8.4 枚舉 155
8.4.1 enum class 155
8.4.2 普通enum 158
8.4.3 未命名enum 159
8.5 建議 159
第9章 語句 160
9.1 導言 160
9.2 語句概述 160
9.3 聲明作為語句 161
9.4 選擇語句 162
9.4.1 if語句 162
9.4.2 switch語句 163
9.4.3 條件中的聲明 165
9.5 循環語句 166
9.5.1 範圍for語句 166
9.5.2 for語句 167
9.5.3 while語句 168
9.5.4 do語句 168
9.5.5 循環退出 168
9.6 goto語句 169
9.7 註釋與縮進 169
9.8 建議 171
第 10章 表達式 172
10.1 導言 172
10.2 桌面計算器示例 172
10.2.1 語法分析器 172
10.2.2 輸入 176
10.2.3 底層輸入 179
10.2.4 錯誤處理 179
10.2.5 驅動程序 180
10.2.6 頭文件 180
10.2.7 命令行參數 181
10.2.8 編程風格 182
10.3 運算符概述 182
10.3.1 結果 185
10.3.2 求值順序 186
10.3.3 運算符優先級 186
10.3.4 臨時對象 187
10.4 常量表達式 188
10.4.1 符號常量 189
10.4.2 常量表達式中的const 189
10.4.3 字面量類型 190
10.4.4 引用參數 190
10.4.5 地址常量表達式 191
10.5 隱式類型轉換 191
10.5.1 提升 191
10.5.2 類型轉換 192
10.5.3 常規算術類型轉換 194
10.6 建議 194
第 11章 選擇操作 195
11.1 其他運算符 195
11.1.1 邏輯運算符 195
11.1.2 位邏輯運算符 195
11.1.3 條件表達式 196
11.1.4 遞增與遞減 197
11.2 自由存儲區 198
11.2.1 內存管理 199
11.2.2 數組 201
11.2.3 獲取內存空間 202
11.2.4 重載new 203
11.3 列表 204
11.3.1 實現模型 205
11.3.2 限定列表 206
11.3.3 未限定列表 206
11.4 lambda表達式 208
11.4.1 實現模型 208
11.4.2 lambda的替代 209
11.4.3 捕獲 210
11.4.4 調用與返回 212
11.4.5 lambda的類型 213
11.5 顯式類型轉換 213
11.5.1 構造 214
11.5.2 命名轉換 216
11.5.3 C風格轉換 217
11.5.4 函數風格轉換 217
11.6 建議 217
第 12章 函數 218
12.1 函數聲明 218
12.1.1 為什麼使用函數 218
12.1.2 函數聲明的組成 219
12.1.3 函數定義 219
12.1.4 返回值 220
12.1.5 inline函數 222
12.1.6 constexpr函數 222
12.1.7 帶有[[noreturn]]的函數 224
12.1.8 局部變量 224
12.2 參數傳遞 225
12.2.1 引用參數 226
12.2.2 數組參數 227
12.2.3 列表參數 228
12.2.4 未定數量的參數 230
12.2.5 默認參數 232
12.3 重載函數 233
12.3.1 自動重載解析 234
12.3.2 重載與返回類型 235
12.3.3 重載與作用域 235
12.3.4 多實參解析 236
12.3.5 手動重載解析 236
12.4 前置與後置條件 237
12.5 函數指針 238
12.6 宏 241
12.6.1 條件編譯 244
12.6.2 預定義宏 244
12.6.3 編譯指令 245
12.7 建議 245
第 13章 異常處理 246
13.1 錯誤處理 246
13.1.1 異常 246
13.1.2 傳統的錯誤處理 247
13.1.3 應付過去 248
13.1.4 異常的替代觀點 249
13.1.5 何時不能使用異常 249
13.1.6 層次化錯誤處理 250
13.1.7 異常與效率 251
13.2 異常保證 252
13.3 資源管理 253
13.3.1 finally 256
13.4 強制不變式 257
13.5 拋出和捕獲異常 260
13.5.1 拋出異常 260
13.5.2 捕獲異常 263
13.5.3 異常與線程 268
13.6 vector的實現 268
13.6.1 一個簡單的vector 268
13.6.2 顯式表示內存 271
13.6.3 賦值 273
13.6.4 改變大小 275
13.7 建議 277
第 14章 命名空間 278
14.1 組合問題 278
14.2 命名空間 279
14.2.1 顯式限定 280
14.2.2 using聲明 281
14.2.3 using指令 282
14.2.4 參數依賴查找 283
14.2.5 命名空間是開放的 284
14.3 模塊化與接口 285
14.3.1 命名空間作為模塊 286
14.3.2 實現 287
14.3.3 接口和實現 289
14.4 使用命名空間組合代碼 290
14.4.1 便利性與*性 290
14.4.2 命名空間別名 291
14.4.3 組合命名空間 291
14.4.4 組合與選擇 292
14.4.5 命名空間與重載 293
14.4.6 版本控制 295
14.4.7 嵌套命名空間 297
14.4.8 未命名命名空間 297
14.4.9 C頭文件 298
14.5 建議 299
第 15章 源文件與程序 300
15.1 單獨編譯 300
15.2 鏈接 301
15.2.1 文件局部名稱 303
15.2.2 頭文件 303
15.2.3 單一定義規則 304
15.2.4 標準庫頭文件 306
15.2.5 鏈接非C++代碼 307
15.2.6 鏈接與函數指針 308
15.3 使用頭文件 309
15.3.1 單頭文件組織 309
15.3.2 多頭文件組織 312
15.3.3 包含保護 315
15.4 程序 316
15.4.1 非局部變量初始化 316
15.4.2 初始化與並發 317
15.4.3 程序終止 317
15.5 建議 318
第3篇 抽象機制
第 16章 類 320
16.1 導言 320
16.2 類的基本概念 321
16.2.1 成員函數 321
16.2.2 默認覆制 322
16.2.3 訪問控制 322
16.2.4 類和結構體 323
16.2.5 構造函數 324
16.2.6 顯式構造函數 326
16.2.7 類內初始化器 328
16.2.8 類內函數定義 328
16.2.9 可變性 329
16.2.10 自引用 331
16.2.11 成員訪問 333
16.2.12 靜態成員 334
16.2.13 成員類型 335
16.3 具體類 336
16.3.1 成員函數 338
16.3.2 輔助函數 340
16.3.3 重載運算符 341
16.3.4 具體類的意義 342
16.4 建議 343
第 17章 構造、清理、覆制和移動 344
17.1 導言 344
17.2 構造函數和析構函數 345
17.2.1 構造函數和不變式 346
17.2.2 析構函數和資源 347
17.2.3 基類和成員析構函數 348
17.2.4 調用構造函數和析構函數 348
17.2.5 虛析構函數 349
17.3 類對象初始化 350
17.3.1 不使用構造函數進行初始化 350
17.3.2 使用構造函數進行初始化 351
17.3.3 默認構造函數 353
17.3.4 初始化器列表構造函數 355
17.4 成員初始化和基類初始化 358
17.4.1 成員初始化 359
17.4.2 基類初始化器 360
17.4.3 委托構造函數 360
17.4.4 類內初始化器 361
17.4.5 static成員初始化 363
17.5 覆制和移動 364
17.5.1 覆制 364
17.5.2 移動 369
17.6 生成默認操作 372
17.6.1 顯式聲明默認操作 372
17.6.2 默認操作 373
17.6.3 使用默認操作 373
17.6.4 使用delete刪除的函數 376
17.7 建議 378
第 18章 運算符重載 379
18.1 導言 379
18.2 運算符函數 380
18.2.1 二元和一元運算符 381
18.2.2 運算符的預置含義 382
18.2.3 運算符和用戶自定義類型 382
18.2.4 傳遞對象 383
18.2.5 命名空間中的運算符 383
18.3 覆數類型 385
18.3.1 成員和非成員運算符 385
18.3.2 混合模式運算 386
18.3.3 類型轉換 387
18.3.4 字面量 389
18.3.5 訪問函數 390
18.3.6 輔助函數 390
18.4 類型轉換 391
18.4.1 類型轉換運算符 391
18.4.2 顯式類型轉換運算符 393
18.4.3 歧義 393
18.5 建議 394
第 19章 特殊運算符 396
19.1 導言 396
19.2 特殊運算符 396
19.2.1 取下標 396
19.2.2 函數調用 397
19.2.3 解引用 398
19.2.4 自增和自減 400
19.2.5 分配和釋放 401
19.2.6 用戶自定義字面量 402
19.3 字符串類 405
19.3.1 基本操作 405
19.3.2 訪問字符 406
19.3.3 類的表示 407
19.3.4 成員函數 409
19.3.5 輔助函數 410
19.3.6 應用String 412
19.4 友元 413
19.4.1 發現友元 414
19.4.2 友元與成員 415
19.5 建議 416
第 20章 派生類 417
20.1 導言 417
20.2 派生類 418
20.2.1 成員函數 419
20.2.2 構造函數和析構函數 420
20.3 類層次結構 421
20.3.1 類型域 421
20.3.2 虛函數 423
20.3.3 顯式限定 425
20.3.4 覆蓋控制 425
20.3.5 using基類成員 428
20.3.6 返回類型放寬 431
20.4 抽象類 432
20.5 訪問控制 434
20.5.1 受保護成員 436
20.5.2 訪問基類 437
20.5.3 using聲明和訪問控制 438
20.6 成員指針 439
20.6.1 函數成員指針 439
20.6.2 數據成員指針 441
20.6.3 基類和派生類成員 441
20.7 建議 442
第 21章 類層次結構 443
21.1 導言 443
21.2 類層次結構的設計 443
21.2.1 實現繼承 443
21.2.2 接口繼承 446
21.2.3 替代實現 447
21.2.4 定位對象創建 450
21.3 多重繼承 451
21.3.1 多重接口 451
21.3.2 多重實現類 451
21.3.3 *歧義 453
21.3.4 重覆使用基類 455
21.3.5 虛基類 456
21.3.6 重覆基類與虛基類 460
21.4 建議 462
下冊
第 22章 運行時類型信息 463
22.1 導言 463
22.2 類層次結構導航 463
22.2.1 dynamic_cast 464
22.2.2 多重繼承 466
22.2.3 static_cast和dynamic_cast 467
22.2.4 恢覆接口 468
22.3 雙重分發和訪問者 471
22.3.1 雙重分發 472
22.3.2 訪問者 473
22.4 構造和析構 475
22.5 類型識別 475
22.5.1 擴展類型信息 477
22.6 RTII的使用和誤用 478
22.7 建議 479
第 23章 模板 480
23.1 介紹與概述 480
23.2 一個簡單字符串模板 481
23.2.1 定義模板 483
23.2.2 模板實例化 484
23.3 類型檢查 484
23.3.1 類型等價性 485
23.3.2 錯誤檢測 486
23.4 類模板成員 487
23.4.1 數據成員 487
23.4.2 成員函數 487
23.4.3 成員類型別名 487
23.4.4 靜態成員 488
23.4.5 成員類型 488
23.4.6 成員模板 489
23.4.7 友元 492
23.5 函數模板 493
23.5.1 函數模板實參 495
23.5.2 函數模板實參推斷 496
23.5.3 函數模板重載 498
23.6 模板別名 501
23.7 源代碼組織 502
23.7.1 鏈接 503
23.8 建議 504
第 24章 泛型編程 505
24.1 導言 505
24.2 算法和提升 506
24.3 概念 508
24.3.1 探索概念 509
24.3.2 概念和約束 511
24.4 具體化概念 512
24.4.1 公理 514
24.4.2 多實參概念 515
24.4.3 值概念 516
24.4.4 約束檢查 517
24.4.5 模板定義檢查 517
24.5 建議 519
第 25章 特化 520
25.1 導言 520
25.2 模板形參和實參 520
25.2.1 類型作為實參 521
25.2.2 值作為實參 522
25.2.3 操作作為實參 523
25.2.4 模板作為實參 525
25.2.5 默認模板實參 525
25.3 特化 527
25.3.1 接口特化 528
25.3.2 主模板 530
25.3.3 特化順序 531
25.3.4 函數模板特化 531
25.4 建議 533
第 26章 實例化 534
26.1 導言 534
26.2 模板實例化 534
26.2.1 何時需要實例化 535
26.2.2 手動控制實例化 536
26.3 名稱綁定 537
26.3.1 依賴名稱 538
26.3.2 定義點綁定 539
26.3.3 實例化點綁定 540
26.3.4 多實例化點 542
26.3.5 模板和命名空間 543
26.3.6 過於激進的ADL 543
26.3.7 來自基類的名稱 545
26.4 建議 547
第 27章 模板和層次結構 548
27.1 導言 548
27.2 參數化和層次結構 548
27.2.1 生成類型 550
27.2.2 模板類型轉換 551
27.3 類模板層次結構 552
27.3.1 模板作為接口 553
27.4 模板參數作為基類 553
27.4.1 組合數據結構 554
27.4.2 線性化類層次結構 557
27.5 建議 561
第 28章 元編程 562
28.1 導言 562
28.2 類型函數 563
28.2.1 類型別名 565
28.2.2 類型謂詞 566
28.2.3 選擇函數 567
28.2.4 萃取 568
28.3 控制結構 569
28.3.1 選擇 569
28.3.2 疊代和遞歸 572
28.3.3 何時使用元編程 573
28.4 條件定義:Enable_if 573
28.4.1 使用Enable_if 575
28.4.2 實現Enable_if 576
28.4.3 Enable_if和概念 576
28.4.4 更多Enable_if示例 577
28.5 編譯時列表: Tuple 579
28.5.1 一個簡單的輸出函數 580
28.5.2 元素訪問 581
28.5.3 make_tuple 584
28.6 可變參數模板 584
28.6.1 一個類型*的printf() 584
28.6.2 技術細節 586
28.6.3 轉發 587
28.6.4 標準庫tuple 588
28.7 國際標準單位示例 591
28.7.1 Unit 591
28.7.2 Quantity 592
28.7.3 Unit字面量 594
28.7.4 實用函數 594
28.8 建議 596
第 29章 矩陣設計 597
29.1 導言 597
29.1.1 基本矩陣用途 597
29.1.2 矩陣要求 599
29.2 矩陣模板 599
29.2.1 構造和賦值 600
29.2.2 下標和切片 602
29.3 矩陣算術運算 604
29.3.1 標量運算 604
29.3.2 加法 605
29.3.3 乘法 606
29.4 矩陣實現 607
29.4.1 slice() 607
29.4.2 矩陣切片 608
29.4.3 Matrix_ref 609
29.4.4 矩陣列表初始化 610
29.4.5 矩陣訪問 612
29.4.6 *維矩陣 614
29.5 解線性方程 614
29.5.1 *高斯消元法 615
29.5.2 主元選取 616
29.5.3 測試 616
29.5.4 熔合運算 617
29.6 建議 619
第4篇 標準庫
第30章 標準庫概覽 622
30.1 導言 622
30.1.1 標準庫設施 622
30.1.2 設計約束 623
30.1.3 描述風格 624
30.2 頭文件 624
30.3 語言支持 628
30.3.1 initializer_list支持 628
30.3.2 範圍for支持 629
30.4 錯誤處理 629
30.4.1 異常 629
30.4.2 斷言 632
30.4.3 system_error 633
30.5 建議 640
第31章 STL容器 642
31.1 導言 642
31.2 容器概覽 642
31.2.1 容器表示 644
31.2.2 元素要求 645
31.3 操作概覽 647
31.3.1 成員類型 649
31.3.2 構造函數、析構函數和賦值操作 650
31.3.3 大小和容量 651
31.3.4 疊代器 651
31.3.5 元素訪問 652
31.3.6 棧操作 653
31.3.7 列表操作 653
31.3.8 其他操作 654
31.4 容器 654
31.4.1 vector 654
31.4.2 鏈表 657
31.4.3 關聯容器 659
31.5 容器適配器 667
31.5.1 stack 668
31.5.2 queue 669
31.5.3 priority_queue 669
31.6 建議 670
第32章 STL算法 672
32.1 導言 672
32.2 算法 672
32.2.1 序列 672
32.3 策略實參 674
32.3.1 覆雜度 675
32.4 不修改序列的算法 675
32.4.1 for_each() 675
32.4.2 序列謂詞 676
32.4.3 count() 676
32.4.4 find() 676
32.4.5 equal()和mismatch() 677
32.4.6 search() 678
32.5 修改序列的算法 678
32.5.1 copy() 679
32.5.2 unique() 679
32.5.3 remove()和replace() 680
32.5.4 rotate()、random_shuffle()和partition() 681
32.5.5 排列 682
32.5.6 fill() 682
32.5.7 swap() 683
32.6 排序和搜索 683
32.6.1 二分搜索 685
32.6.2 merge() 686
32.6.3 集合算法 687
32.6.4 堆 688
32.6.5 lexicographical_compare() 688
32.7 *小值和*值 689
32.8 建議 690
第33章 STL疊代器 691
33.1 導言 691
33.1.1 疊代器模型 691
33.1.2 疊代器類別 692
33.1.3 疊代器萃取 693
33.1.4 疊代器操作 695
33.2 疊代器適配器 696
33.2.1 反向疊代器 696
33.2.2 插入疊代器 698
33.2.3 移動疊代器 699
33.3 範圍訪問函數 699
33.4 函數對象 700
33.5 函數適配器 701
33.5.1 bind() 701
33.5.2 mem_fn() 703
33.5.3 function 703
33.6 建議 705
第34章 內存和資源 706
34.1 導言 706
34.2 “擬容器” 706
34.2.1 array 707
34.2.2 bitset 709
34.2.3 vector 712
34.2.4 元組 713
34.3 資源管理指針 716
34.3.1 unique_ptr 716
34.3.2 shared_ptr 719
34.3.3 weak_ptr 721
34.4 分配器 723
34.4.1 默認分配器 724
34.4.2 分配器萃取 725
34.4.3 指針萃取 726
34.4.4 限域的分配器 726
34.5 垃圾收集接口 728
34.6 未初始化內存 730
34.6.1 臨時緩沖區 730
34.6.2 raw_storage_iterator 730
34.7 建議 731
第35章 工具 732
35.1 導言 732
35.2 時間 732
35.2.1 duration 733
35.2.2 time_point 735
35.2.3 時鐘 736
35.2.4 時間萃取 737
35.3 編譯時有理數運算 738
35.4 類型函數 739
35.4.1 類型萃取 739
35.4.2 類型生成器 742
35.5 更多工具 746
35.5.1 move()和forward() 747
35.5.2 swap() 747
35.5.3 關系運算符 748
35.5.4 比較和哈希type_info 749
35.6 建議 749
第36章 字符串 750
36.1 導言 750
36.2 字符分類 750
36.2.1 分類函數 750
36.2.2 字符萃取 751
36.3 字符串 752
36.3.1 string與C風格字符串 753
36.3.2 構造函數 754
36.3.3 基本操作 755
36.3.4 字符串I/O 756
36.3.5 數值轉換 757
36.3.6 類STL操作 758
36.3.7 find系列函數 760
36.3.8 子串 761
36.4 建議 762
第37章 正則表達式 763
37.1 正則表達式 763
37.1.1 正則表達式表示法 764
37.2 regex 767
37.2.1 匹配結果 768
37.2.2 格式化 771
37.3 正則表達式函數 771
37.3.1 regex_match() 772
37.3.2 regex_search() 773
37.3.3 regex_replace() 774
37.4 正則表達式疊代器 775
37.4.1 regex_iterator 775
37.4.2 regex_token_iterator 776
37.5 regex_traits 778
37.6 建議 778
第38章 I/O流 779
38.1 導言 779
38.2 I/O流層次結構 781
38.2.1 文件流 781
38.2.2 字符串流 782
38.3 錯誤處理 784
38.4 I/O操作 785
38.4.1 輸入操作 785
38.4.2 輸出操作 788
38.4.3 操縱符 789
38.4.4 流狀態 790
38.4.5 格式化 794
38.5 流疊代器 799
38.6 緩沖 800
38.6.1 輸出流和緩沖區 802
38.6.2 輸入流和緩沖區 803
38.6.3 緩沖區疊代器 804
38.7 建議 805
第39章 區域設置 807
39.1 處理文化差異 807
39.2 locale類 809
39.2.1 命名的locale 810
39.2.2 string的比較 813
39.3 facet類 813
39.3.1 訪問locale中的facet 814
39.3.2 一個簡單的用戶自定義facet 815
39.3.3 locale和facet的使用 817
39.4 標準facet 817
39.4.1 string的比較 819
39.4.2 數值格式化 821
39.4.3 貨幣格式化 825
39.4.4 日期和時間格式化 829
39.4.5 字符分類 831
39.4.6 字符編碼轉換 834
39.4.7 消息 837
39.5 便利接口 840
39.5.1 字符分類 840
39.5.2 字符轉換 841
39.5.3 字符串轉換 841
39.5.4 緩沖區轉換 842
39.6 建議 843
第40章 數值 844
40.1 導言 844
40.2 數值極限 844
40.2.1 數值極限宏 846
40.3 標準數學函數 847
40.4 complex覆數 848
40.5 數值數組:valarray 849
40.5.1 構造函數和賦值 849
40.5.2 下標 851
40.5.3 運算 852
40.5.4 切片 854
40.5.5 slice_array 856
40.5.6 通用切片 856
40.6 通用數值算法 857
40.6.1 accumulate() 858
40.6.2 inner_product() 859
40.6.3 partial_sum()與adjacent_difference() 859
40.6.4 iota() 860
40.7 隨機數 860
40.7.1 引擎 862
40.7.2 隨機設備 864
40.7.3 分布 864
40.7.4 C風格隨機數 867
40.8 建議 868
第41章 並發 869
41.1 導言 869
41.2 內存模型 870
41.2.1 內存位置 870
41.2.2 指令重排 871
41.2.3 內存序 872
41.2.4 數據競爭 873
41.3 原子性 874
41.3.1 原子類型 875
41.3.2 原子標誌和柵欄 879
41.4 volatile 880
41.5 建議 880
第42章 線程和任務 881
42.1 導言 881
42.2 線程 881
42.2.1 身份 882
42.2.2 構造 883
42.2.3 析構 884
42.2.4 join() 884
42.2.5 detach() 885
42.2.6 命名空間this_thread 886
42.2.7 殺死thread 887
42.2.8 thread_local數據 887
42.3 避免數據競爭 888
42.3.1 互斥量 889
42.3.2 多重鎖 895
42.3.3 call_once() 896
42.3.4 條件變量 897
42.4 基於任務的並發 900
42.4.1 future和promise 901
42.4.2 promise 901
42.4.3 packaged_task 902
42.4.4 future 905
42.4.5 shared_future 907
42.4.6 async() 907
42.4.7 一個並行find()示例 909
42.5 建議 911
第43章 C標準庫 913
43.1 導言 913
43.2 文件 913
43.3 printf()系列函數 914
43.4 C風格字符串 916
43.5 內存 917
43.6 日期和時間 918
43.7 其他 921
43.8 建議 922
第44章 兼容性 923
44.1 導言 923
44.2 C++11擴展 923
44.2.1 語言特性 923
44.2.2 標準庫組件 924
44.2.3 棄用特性 925
44.2.4 應對早期C++實現 926
44.3 C/C++兼容性 926
44.3.1 C和C++是兄弟 926
44.3.2 “靜默”差異 927
44.3.3 不兼容C++的C代碼 928
44.3.4 不兼容C的C++代碼 930
44.4 建議 931
