C++標準庫(第2版)

C++標準庫(第2版)

《C++標準庫(第2版)》是2015年6月電子工業出版社出版的圖書,作者是Nicolai M. Josuttis。

內容簡介

《C++標準庫(第2版)》是全球C++經典權威參考書籍時隔12年,基於C++11標準的全新重大升級。標準庫提供了一組公共類和接口,極大地拓展了C++語言核心功能。《C++標準庫(第2版)》詳細講解了每一標準庫組件,包括其設計目的和方法、複雜概念的剖析、實用而高效的編程細節、存在的陷阱、重要的類和函式,又輔以大量用C++11標準實現的實用代碼範例。除覆蓋全新組件、特性外,《C++標準庫(第2版)》一如前版,重點著眼於標準模板庫(STL),涉及容器、疊代器、函式對象以及STL算法。此外,《C++標準庫(第2版)》同樣關注lambda表達式、基於區間的for循環、move語義及可變參數模板等標準庫中的新式C++編程風格及其影響。

作者簡介

Nicolai M. Josuttis是一名獨立技術顧問,為電信、交通、金融和製造業設計過大中型軟體系統。他曾是C++標準委員會庫工作小組成員,因其權威著作而在編程領域聲名鵲起。除了最為暢銷的《C++標準庫》(第1版出版於1999年),其著作還包括C++ Templates: The Complete Guide(與David Vandevoorde合著,由Addison-Wesley於2003年出版),以及SOA in Practice: The Art of Distributed System Design(由O’Reilly Media於2007年出版,簡體中文版《SOA實踐指南——分散式系統設計的藝術》由電子工業出版社於2008年出版)。

譯者侯捷:計算機技術書籍的作家、譯者、書評人,長期活躍於C++技術分享與教學領域。著有《深入淺出MFC》《多型與虛擬》《STL源碼剖析》《無責任書評》三卷,譯有眾多膾炙人口的權威技術書籍,包括Meyers所著的“Effective C++”系列。侯捷兼任教職於元智大學、同濟大學、南京大學。

圖書目錄

第 2 版譯序 xxi

第 2 版序言 xxiii

第 2 版致謝 xxiv

第 1 版序言 xxv

第 1 版致謝 xxvi

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 C++ Standard 的歷史 7

2.1.1 C++11 Standard 常見疑問 8

2.1.2 C++98 和 C++11 的兼容性 9

2.2 複雜度與 Big-O 標記 10

3 語言新特性 13

3.1 C++11 語言新特性 13

3.1.1 微小但重要的語法提升 13

3.1.2 以auto完成類型自動推導 14

3.1.3 一致性初始化(Uniform Initialization)與初值列(Initializer List) 15

3.1.4 Range-Based for循環 17

3.1.5 Move 語義和 Rvalue Reference 19

3.1.6 新式的字元串字面常量(String Literal) 23

3.1.7 關鍵字noexcept 24

3.1.8 關鍵字constexpr 26

3.1.9 嶄新的 Template 特性 26

3.1.10 Lambda 28

3.1.11 關鍵字decltype 32

3.1.12 新的函式聲明語法(New Function Declaration Syntax) 32

3.1.13 帶領域的(Scoped) Enumeration 32

3.1.14 新的基礎類型(New Fundamental Data Type) 33

3.2 雖舊猶新的語言特性 33

3.2.1 基礎類型的明確初始化(Explicit Initialization for Fundamental Type) 37

3.2.2 main()定義式 37

4 一般概念 39

4.1 命名空間(Namespace)std 39

4.2 頭檔案(Header File) 40

4.3 差錯和異常(Error and Exception)的處理 41

4.3.1 標準的 Exception Class(異常類) 41

4.3.2 異常類(Exception Class)的成員 44

4.3.3 以 Class exception_ptr傳遞異常 52

4.3.4 拋出標準異常 53

4.3.5 自標準異常類派生 54

4.4 Callable Object(可被調用的對象) 54

4.5 並發與多執行緒 55

4.6 分配器(Allocator) 57

5 通用工具 59

5.1 Pair 和 Tuple 60

5.1.1 Pair 60

5.1.2 Tuple(不定數的值組) 68

5.1.3 Tuple 的輸入/輸出 74

5.1.4 tuple和pair轉換 75

5.2 Smart Pointer(智慧型指針) 76

5.2.1 Class shared_ptr 76

5.2.2 Class weak_ptr 84

5.2.3 誤用 Shared Pointer 89

5.2.4 細究 Shared Pointer 和 Weak Pointer 92

5.2.5 Class unique_ptr 98

5.2.6 細究 Class unique_ptr 110

5.2.7 Class auto_ptr 113

5.2.8 Smart Pointer 結語 114

5.3 數值的極值(Numeric Limit) 115

5.4 Type Trait 和 Type Utility 122

5.4.1 Type Trait 的目的 122

5.4.2 細究 Type Trait 125

5.4.3 Reference Wrapper(外覆器) 132

5.4.4 Function Type Wrapper(外覆器) 133

5.5 輔助函式 134

5.5.1 挑選最小值和最大值 134

5.5.2 兩值互換(Swapping) 136

5.5.3 增補的“比較操作符”(Comparison Operator) 138

5.6 Class ratio<>的編譯期分數運算 140

5.7 Clock 和 Timer 143

5.7.1 Chrono 程式庫概觀 143

5.7.2 Duration(時間段) 144

5.7.3 Clock(時鐘)和 Timepoint(時間點) 149

5.7.4 C 和 POSIX 提供的 Date/Time 函式 157

5.7.5 以計時器停滯執行緒(Blocking with Timer) 160

5.8 頭檔案<cstddef>、<cstdlib>和<cstring> 161

5.8.1 <cstddef>內的各項定義 161

5.8.2 <cstdlib>內的各種定義 162

5.8.3 <cstring>中的定義式 163

6 標準模板庫 165

6.1 STL 組件(Component) 165

6.2 容器(Container) 167

6.2.1 序列式容器(Sequence Container) 169

6.2.2 關聯式容器(Associative Container) 177

6.2.3 無序容器(Unordered Container) 180

6.2.4 關聯式數組(Associative Array) 185

6.2.5 其他容器 187

6.2.6 容器適配器(Container Adapter) 188

6.3 疊代器(Iterator) 188

6.3.1 關聯式( Associative )及無序( Unordered )容器的更多實例 193

6.3.2 疊代器種類(Iterator Category) 198

6.4 算法(Algorithm) 199

6.4.1 區間(Range) 203

6.4.2 處理多重區間(Multiple Ranges) 207

6.5 疊代器之適配器(Iterator Adapter) 210

6.5.1 Insert Iterator(安插型疊代器) 210

6.5.2 Stream Iterator(串流疊代器) 212

6.5.3 Reverse Iterator(反向疊代器) 214

6.5.4 Move Iterator(搬移疊代器) 216

6.6 用戶自定義的泛型函式(User-Defined Generic Function) 216

6.7 更易型算法(Manipulating Algorithm) 217

6.7.1 移除(Removing)元素 218

6.7.2 更易 Associative(關聯式)和 Unordered(無序)容器 221

6.7.3 算法 vs. 成員函式 223

6.8 以函式作為算法的實參 224

6.8.1 以函式作為算法實參的實例示範 224

6.8.2 判斷式(Predicate) 226

6.9 使用 Lambda 229

6.10 函式對象(Function Object) 233

6.10.1 定義一個函式對象 233

6.10.2 預定義的函式對象 239

6.10.3 Binder 241

6.10.4 函式對象 vs. Lambda 243

6.11 容器內的元素 244

6.11.1 容器元素的必要條件 244

6.11.2 Value 語義 vs. Reference 語義 245

6.12 STL 內部的錯誤和異常 245

6.12.1 錯誤處理(Error Handling) 246

6.12.2 異常處理(Exception Handling) 248

6.13 擴展 STL 250

6.13.1 整合更多 Type 250

6.13.2 派生自 STL Type 251

7 STL 容器 253

7.1 容器的共通能力和共通操作 254

7.1.1 容器的共通能力 254

7.1.2 容器的共通操作 254

7.1.3 容器提供的類型 260

7.2 Array 261

7.2.1 Array 的能力 261

7.2.2 Array 的操作 263

7.2.3 把array當成 C-Style Array 267

7.2.4 異常處理( Exception Handling ) 268

7.2.5 Tuple 接口 268

7.2.6 Array 運用實例 268

7.3 Vector 270

7.3.1 Vector 的能力 270

7.3.2 Vector 的操作 273

7.3.3 將 Vector 當作 C-Style Array 使用 278

7.3.4 異常處理( Exception Handling ) 278

7.3.5 Vector 使用實例 279

7.3.6 Class vector<bool> 281

7.4 Deque 283

7.4.1 Deque 的能力 284

7.4.2 Deque 的操作函式 284

7.4.3 Exception Handling 288

7.4.4 Deque 運用實例 288

7.5 List 290

7.5.1 List 的能力 290

7.5.2 List 的操作 291

7.5.3 異常處理( Exception Handling ) 296

7.5.4 List 運用實例 298

7.6 Forward List 300

7.6.1 Forward List 的能力 300

7.6.2 Forward List 的操作 302

7.6.3 異常處理( Exception Handling ) 311

7.6.4 Forward List 運用實例 312

7.7 Set 和 Multiset 314

7.7.1 Set 和 Multiset 的能力 315

7.7.2 Set and Multiset 的操作函式 316

7.7.3 異常處理( Exception Handling ) 325

7.7.4 Set 和 Multiset 運用實例 325

7.7.5 運行期指定排序準則 328

7.8 Map 和 Multimap 331

7.8.1 Map 和 Multimap 的能力 332

7.8.2 Map 和 Multimap 的操作函式 333

7.8.3 將 Map 視為關聯式數組( Associative Array ) 343

7.8.4 異常處理( Exception Handling ) 345

7.8.5 Map 和 Multimap 運用實例 345

7.8.6 綜合實例:運用 Map、 String 並於運行期指定排序準則 351

7.9 無序容器( Unordered Container ) 355

7.9.1 Unordered 容器的能力 357

7.9.2 創建和控制 Unordered 容器 359

7.9.3 Unordered 容器的其他操作 367

7.9.4 Bucket 接口 374

7.9.5 使用 Unordered Map 作為 Associative Array 374

7.9.6 異常處理( Exception Handling ) 375

7.9.7 Unordered 容器的運用實例 375

7.10 其他 STL 容器 385

7.10.1 String 作為一種 STL 容器 385

7.10.2 C-Style Array 作為一種 STL 容器 386

7.11 實現 Reference 語義 388

7.12 各種容器的使用時機 392

8 細探 STL 容器成員 397

8.1 容器內的類型 397

8.2 創建、複製和銷毀( Create, Copy, and Destroy ) 400

8.3 非更易型操作( Nonmodifying Operation ) 403

8.3.1 大小相關操作( Size Operation ) 403

8.3.2 元素比較( Comparison Operation ) 404

8.3.3 Associative 和 Unordered 容器特有的非更易型操作 404

8.4 賦值( Assignment ) 406

8.5 元素直接訪問( Direct Element Access ) 408

8.6 “產出疊代器”之各項操作 410

8.7 安插和移除( Inserting and Removing )元素 411

8.7.1 安插單一元素( Inserting Single Element ) 411

8.7.2 安插多重元素( Inserting Multiple Elements ) 416

8.7.3 移除元素( Removing Element ) 417

8.7.4 重設大小( Resizing ) 420

8.8 List 和 Forward List 的特殊成員函式 420

8.8.1 特殊成員函式(針對 List 和 Forward List ) 420

8.8.2 特殊成員函式(只針對 Forward List ) 423

8.9 容器的策略接口( Policy Interface ) 427

8.9.1 非更易型策略函式( Nonmodifying Policy Function ) 427

8.9.2 更易型策略函式( Modifying Policy Function ) 428

8.9.3 Unordered 容器的 Bucket 相關接口 429

8.10 對分配器( Allocator )的支持 430

8.10.1 基本的分配器成員( Fundamental Allocator Member ) 430

8.10.2 帶有“可選之分配器參數”的構造函式 430

9 STL 疊代器 433

9.1 疊代器頭檔案( Header Files for Iterators ) 433

9.2 疊代器種類( Iterator Category ) 433

9.2.1 Output 疊代器 433

9.2.2 Input 疊代器 435

9.2.3 Forward(前向)疊代器 436

9.2.4 Bidirectional(雙向)疊代器 437

9.2.5 Random-Access(隨機訪問)疊代器 438

9.2.6 Vector 疊代器的遞增( Increment )和遞減( Decrement ) 440

9.3 疊代器相關輔助函式 441

9.3.1 advance() 441

9.3.2 next()和prev() 443

9.3.3 distance() 445

9.3.4 iter_swap() 446

9.4 疊代器適配器( Iterator Adapter ) 448

9.4.1 Reverse(反向)疊代器 448

9.4.2 Insert(安插型)疊代器 454

9.4.3 Stream(串流)疊代器 460

9.4.4 Move(搬移)疊代器 466

9.5 Iterator Trait(疊代器特性) 466

9.5.1 為疊代器編寫泛型函式( Generic Function ) 468

9.6 用戶自定義( User-Defined )疊代器 471

10 STL 函式對象及 Lambda 475

10.1 Function Object(函式對象)的概念 475

10.1.1 以 Function Object 為排序準則( Sorting Criterion ) 476

10.1.2 Function Object 擁有內部狀態( Internal State ) 478

10.1.3 for_each()的返回值 482

10.1.4 Predicate(判斷式) vs. Function Object(函式對象) 483

10.2 預定義的 Function Object 和 Binder 486

10.2.1 預定義的 Function Object 486

10.2.2 Function Adapter 和 Binder 487

10.2.3 以 Function Adapter 搭配用戶自定義的 Function Object 495

10.2.4 過時的( Deprecated ) Function Adapter 497

10.3 運用 Lambda 499

10.3.1 Lambda vs. Binder 499

10.3.2 Lambda vs. 帶有狀態的( Stateful ) Function Object 500

10.3.3 Lambda 調用全局函式和成員函式 502

10.3.4 Lambda 作為 Hash 函式、排序準則或相等準則 504

11 STL 算法 505

11.1 算法頭檔案(Header File) 505

11.2 算法概觀 505

11.2.1 扼要介紹 506

11.2.2 算法分門別類 506

11.3 輔助函式 517

11.4 for_each()算法 519

11.5 非更易型算法(Nonmodifying Algorithm) 524

11.5.1 元素計數 524

11.5.2 最小值和最大值 525

11.5.3 查找元素(Searching Element) 528

11.5.4 區間的比較 542

11.5.5 Predicate 用以檢驗區間 550

11.6 更易型算法(Modifying Algorithm) 557

11.6.1 複製元素(Copying Element) 557

11.6.2 搬移元素(Moving Element) 561

11.6.3 轉換和結合元素(Transforming and Combining Element) 563

11.6.4 互換元素(Swapping Elements) 566

11.6.5 賦值(Assigning New Value) 568

11.6.6 替換元素(Replacing Element) 571

11.7 移除型算法(Removing Algorithm) 575

11.7.1 移除某些元素 575

11.7.2 移除重複元素 578

11.8 變序型算法(Mutating Algorithm) 583

11.8.1 反轉元素次序(Reversing the Order of Elements) 583

11.8.2 旋轉元素(Rotating Elements) 584

11.8.3 排列元素(Permuting Elements) 587

11.8.4 對元素重新洗牌(Shuffling Elements) 589

11.8.5 將元素向前搬(Moving Elements to the Front) 592

11.8.6 劃分為兩個子區間(Partition into Two Subranges) 594

11.9 排序算法(Sorting Algorithm) 596

11.9.1 對所有元素排序 596

11.9.2 局部排序(Partial Sorting) 599

11.9.3 根據第 {\itshape n} 個元素排序 602

11.9.4 Heap 算法 604

11.10 已序區間算法(Sorted-Range Algorithm) 608

11.10.1 查找元素(Searching Element) 608

11.10.2 合併元素(Merging Elements) 614

11.11 數值算法(Numeric Algorithm) 623

11.11.1 運算後產生結果 623

11.11.2 相對數列和絕對數列之間的轉換 627

12 特殊容器 631

12.1 Stack(堆疊) 632

12.1.1 核心接口 633

12.1.2 Stack 運用實例 633

12.1.3 一個用戶自定義的 Stack Class 635

12.1.4 細究 Class stack<> 637

12.2 Queue(佇列) 638

12.2.1 核心接口 639

12.2.2 Queue 運用實例 640

12.2.3 一個用戶自定義的 Queue Class 641

12.2.4 細究 Class queue<> 641

12.3 Priority Queue(帶優先權的佇列) 641

12.3.1 核心接口 643

12.3.2 Priority Queue 運用實例 643

12.3.3 細究 Class priority_queue<> 644

12.4 細究 Container Adapter 645

12.4.1 類型定義 645

12.4.2 構造函式(Constructor) 646

12.4.3 Priority Queue 額外提供的構造函式 646

12.4.4 各項操作(Operation) 647

12.5 Bitset 650

12.5.1 Bitset 運用實例 651

12.5.2 細究 Class bitset 653

13 字元串 655

13.1 String Class 的目的 656

13.1.1 例一:提煉臨時檔案名稱 656

13.1.2 例二:提煉單詞並反向列印 660

13.2 String Class 細節描述 663

13.2.1 String 的各種相關類型 663

13.2.2 操作函式概覽 666

13.2.3 構造函式和析構函式(Constructor and Destructor) 667

13.2.4 String 和 C-String 668

13.2.5 大小和容量(Size and Capacity) 669

13.2.6 元素訪問(Element Access) 671

13.2.7 比較(Comparison) 672

13.2.8 更改內容(Modifier) 673

13.2.9 子字元串(Substring)及字元串接合(String Concatenation) 676

13.2.10 I/O 操作符 677

13.2.11 搜尋和查找(Searching and Finding) 678

13.2.12 npos的意義 680

13.2.13 數值轉換(Numeric Conversion) 681

13.2.14 String 對疊代器的支持 684

13.2.15 國際化(Internationalization) 689

13.2.16 效率(Performance) 692

13.2.17 String 和 Vector 692

13.3 細究 String Class 693

13.3.1 類型定義和靜態值 693

13.3.2 創建、複製、銷毀(Create, Copy, and Destroy) 694

13.3.3 大小和容量(Size and Capacity) 696

13.3.4 比較(Comparison) 697

13.3.5 字元訪問 699

13.3.6 產生 C-String 和字元數組(Character Array) 700

13.3.7 “改動”之相關操作(Modifying Operation) 700

13.3.8 查找(Searching and Finding) 708

13.3.9 子字元串(Substring)及字元串接合(String Concatenation) 711

13.3.10 I/O函式 712

13.3.11 數值轉換(Numeric Conversion) 713

13.3.12 生成 Iterator 714

13.3.13 對 Allocator 的支持 715

14 正則表達式 717

14.1 Regex 的匹配和查找接口(Match and Search Interface) 717

14.2 處理“次表達式”(Subexpression) 720

14.3 Regex Iterator 726

14.4 Regex Token Iterator 727

14.5 用於替換的正則表達式 730

14.6 Regex Flag 732

14.7 Regex 的異常(Exception) 735

14.8 Regex ECMAScript 文法 738

14.9 其他文法 739

14.10 細究 Basic Regex 簽名式 740

15 以 Stream 完成 I/O 743

15.1 I/O Stream 的共通基礎(Common Background) 744

15.1.1 Stream 對象 744

15.1.2 Stream Class 744

15.1.3 全局的 Stream 對象 745

15.1.4 Stream 操作符 745

15.1.5 操控器(Manipulator) 746

15.1.6 一個簡單例子 746

15.2 基本 Stream Class 和其對象 748

15.2.1 Class 及其層次體系 748

15.2.2 全局性的 Stream 對象 751

15.2.3 頭檔案 752

15.3 標準的 Stream 操作符<<和>> 753

15.3.1 Output 操作符<< 753

15.3.2 Input 操作符>> 754

15.3.3 特殊類型的 I/O 755

15.4 Stream 的狀態(State) 758

15.4.1 表示“ Stream 狀態”的常量 758

15.4.2 用來“處理 Stream 狀態”的成員函式 759

15.4.3 Stream 狀態與 Boolean 條件測試 760

15.4.4 Stream 的狀態和異常 762

15.5 標準 I/O 函式 767

15.5.1 Input 相關函式 768

15.5.2 Output 相關函式 771

15.5.3 實例 772

15.5.4 sentry對象 772

15.6 操控器(Manipulator) 774

15.6.1 操控器概覽 774

15.6.2 操控器如何運作 776

15.6.3 用戶自定義的操控器 777

15.7 格式化(Formatting) 779

15.7.1 Format Flag(格式標誌) 779

15.7.2 Boolean 的 I/O 格式 781

15.7.3 欄位寬度、填充字元、位置調整 781

15.7.4 正號與大寫 784

15.7.5 數值基底(Numeric Base) 785

15.7.6 浮點數(Floating-Point)表示法 787

15.7.7 一般格式(General Formatting)定義 789

15.8 國際化(Internationalization) 790

15.9 檔案訪問(File Access) 791

15.9.1 File Stream Class 791

15.9.2 File Stream 的 Rvalue 和 Move 語義 795

15.9.3 File Flag(檔案標誌) 796

15.9.4 隨機訪問(Random Access) 799

15.9.5 使用檔案描述器(File Descriptor) 801

15.10 為 String 而設計的 Stream Class 802

15.10.1 String Stream Class 802

15.10.2 String Stream 的 Move 語義 806

15.10.3 char* Stream Class 807

15.11 “用戶自定義類型”之 I/O 操作符 810

15.11.1 實現一個 Output 操作符 810

15.11.2 實現一個 Input 操作符 812

15.11.3 以輔助函式完成 I/O 814

15.11.4 用戶自定義之 Format Flag(格式標誌) 815

15.11.5 用戶自定義 I/O 操作符的規約(Convention) 818

15.12 連線 Input 和 Output Stream 819

15.12.1 以tie()完成松耦合(Loose Coupling) 819

15.12.2 以 Stream 緩衝區完成緊耦合(Tight Coupling) 820

15.12.3 將標準 Stream 重定向(Redirecting) 822

15.12.4 可讀可寫的 Stream 824

15.13 Stream Buffer Class 826

15.13.1 Stream 緩衝區接口 826

15.13.2 Stream 緩衝區的 Iterator 828

15.13.3 用戶自定義之 Stream 緩衝區 832

15.14 關於效能(Performance) 844

15.14.1 與 C 標準串流同步(Synchronization with C's Standard Streams) 845

15.14.2 Stream 緩衝區內的緩衝機制 845

15.14.3 直接使用 Stream 緩衝區 846

16 國際化 849

16.1 字元編碼和字元集 850

16.1.1 多位元組(Multibyte)和寬字元(Wide-Character)文本 850

16.1.2 不同的字元集 851

16.1.3 在 C++ 中處理字元集 852

16.1.4 Character Trait 853

16.1.5 特殊字元的國際化 857

16.2 Locale(地域)概念 857

16.2.1 使用 Locale 858

16.2.2 Locale Facet 864

16.3 細究 Locale 866

16.4 細究 Facet 869

16.4.1 數值格式化(Numeric Formatting) 870

16.4.2 貨幣符號格式化(Monetary Formatting) 874

16.4.3 時間和日期格式化(Time and Date Formatting) 884

16.4.4 字元的分類和轉換 891

16.4.5 字元串校勘(String Collation) 904

16.4.6 訊息國際化(Internationalized Message) 905

17 數值 907

17.1 隨機數及分布(Random Number and Distribution) 907

17.1.1 第一個例子 908

17.1.2 引擎(Engine) 912

17.1.3 細說引擎(Engine) 915

17.1.4 分布(Distribution) 917

17.1.5 細說分布(Distribution) 921

17.2 複數(Complex Number) 925

17.2.1 Class complex<>一般性質 925

17.2.2 Class complex<>運用實例 926

17.2.3 複數的各項操作 928

17.2.4 細說 Class complex<> 935

17.3 全局數值函式(Global Numeric Function) 941

17.4 Valarray 943

18 並發 945

18.1 高級接口:async()和 Future 946

18.1.1 async()和 Future 的第一個用例 946

18.1.2 實例:等待兩個 Task 955

18.1.3 Shared Future 960

18.2 低層接口:Thread 和 Promise 964

18.2.1 Class std::thread 964

18.2.2 Promise 969

18.2.3 Class packaged_task<> 972

18.3 細說啟動執行緒(Starting a Thread) 973

18.3.1 細說async() 974

18.3.2 細說 Future 975

18.3.3 細說 Shared Future 976

18.3.4 細說 Class std::promise 977

18.3.5 細說 Class std::packaged_task 977

18.3.6 細說 Class std::thread 979

18.3.7 Namespace this_thread 981

18.4 執行緒同步化與 Concurrency(並發)問題 982

18.4.1 當心 Concurrency(並發) 982

18.4.2 Concurrent Data Access 為什麼造成問題 983

18.4.3 什麼情況下可能出錯 983

18.4.4 解決問題所需要的性質(Feature) 987

18.5 Mutex 和 Lock 989

18.5.1 使用 Mutex 和 Lock 989

18.5.2 細說 Mutex 和 Lock 998

18.5.3 只調用一次 1000

18.6 Condition Variable(條件變數) 1003

18.6.1 Condition Variable(條件變數)的意圖 1003

18.6.2 Condition Variable(條件變數)的第一個完整例子 1004

18.6.3 使用 Condition Variable(條件變數)實現多執行緒 Queue 1006

18.6.4 細說 Condition Variable(條件變數) 1009

18.7 Atomic 1012

18.7.1 Atomic 用例 1012

18.7.2 細說 Atomic 及其高級接口 1016

18.7.3 Atomic 的 C-Style 接口 1019

18.7.4 Atomic 的低層接口 1019

19 分配器 1023

19.1 以應用程式開發者的角度使用 Allocator 1023

19.2 用戶自定義的 Allocator 1024

19.3 以程式庫開發者的角度使用 Allocator 1026

參考書目 1031

新聞組及論壇( Newsgroup and Forum ) 1031

書籍和網站 1032

索引 1037

熱門詞條

聯絡我們