Boost是一個功能強大、構造精巧、跨平臺、開源并且完全免費的C++程序庫,有著“C++‘準’標準庫”的美譽。Boost由C++標準委員會的部分成員所設立的Boost社區開發并維護,使用了許多現代C++編程技術,其內容涵蓋字符串處理、正則表達式、容器與數據結構、并發編程、函數式編程、泛型編程、設計模式實現等許多領域,極大地豐富了C++的功能和表現力,能夠使C++軟件開發更加簡捷、靈活和高效。本書基于2019年12月發布的Boost 1.72版編寫,介紹了其中所有的160余個庫,并且結合C++11/14/17標準詳細、深入地講解了其中的數十個庫,同時實現了若干頗具實用價值的工具類和函數,可以幫助讀者迅速地理解和掌握Boost的用法,并將其應用于實際的開發工作中。本書內容豐富、結構嚴謹、詳略得當、講解透徹,意在帶領讀者領略C++最新的前沿技術,相信它會成為每位C++程序員的必備工具書。
羅劍鋒(網名Chrono)在1996年就讀于東北財經大學;1997年開始接觸C/C++;1998年參加計算機軟件專業技術資格和水平考試,獲高級程序員資質;2003年畢業于北京理工大學,獲計算機專業碩士學位。主要研究方向為C/C++、設計模式、高性能網絡服務器開發,業余愛好是閱讀、旅游、欣賞音樂和電影。
目錄
第0章 導讀 1
0.1 關于本書 1
0.2 讀者對象 2
0.3 術語與風格 2
0.4 語言標準 3
0.5 本書的結構 4
0.6 如何閱讀本書 5
0.7 本書的源碼 5
第1章 總論 7
1.1 簡介 7
1.1.1 獲取方式 8
1.1.2 目錄結構 8
1.1.3 使用方式 9
1.2 開發環境 10
1.2.1 快捷安裝 10
1.2.2 完全安裝 10
1.2.3 定制安裝 11
1.2.4 編譯驗證 11
1.3 構建工具 12
1.3.1 安裝方式 12
1.3.2 構建腳本 13
1.3.3 構建語言 13
1.3.4 構建命令 14
1.4 總結 14
第2章 時間與日期 15
2.1 timer庫概述 15
2.2 timer 16
2.2.1 用法 16
2.2.2 類摘要 17
2.2.3 使用建議 18
2.3 progress_timer 18
2.3.1 用法 18
2.3.2 類摘要 19
2.4 date_time庫概述 20
2.4.1 使用方式 20
2.4.2 基本概念 21
2.5 處理日期 21
2.5.1 日期 22
2.5.2 創建日期對象 22
2.5.3 訪問日期 24
2.5.4 日期的輸出 25
2.5.5 轉換C結構 26
2.5.6 日期長度 26
2.5.7 日期運算 27
2.5.8 日期區間 29
2.5.9 日期區間運算 30
2.5.10 日期迭代器 32
2.5.11 其他功能 33
2.5.12 綜合運用 33
2.6 處理時間 36
2.6.1 時間長度 36
2.6.2 操作時間長度 38
2.6.3 時間精確度 39
2.6.4 時間點 41
2.6.5 創建時間點對象 42
2.6.6 操作時間點對象 42
2.6.7 轉換C結構 43
2.6.8 時間區間 44
2.6.9 時間迭代器 44
2.6.10 綜合運用 45
2.7 date_time庫的高級議題 48
2.7.1 編譯配置宏 48
2.7.2 自定義字面值 48
2.7.3 格式化時間 49
2.7.4 本地時間 50
2.8 總結 51
第3章 內存管理 53
3.1 smart_ptr庫概述 53
3.1.1 RAII機制 53
3.1.2 智能指針 54
3.2 scoped_ptr 55
3.2.1 類摘要 55
3.2.2 操作函數 56
3.2.3 用法 57
3.2.4 對比標準 59
3.3 shared_ptr 61
3.3.1 類摘要 61
3.3.2 操作函數 62
3.3.3 用法 64
3.3.4 工廠函數 65
3.3.5 應用于標準容器 66
3.3.6 應用于橋接模式 67
3.3.7 應用于工廠模式 68
3.3.8 定制刪除器 70
3.3.9 高級議題 71
3.4 weak_ptr 75
3.4.1 類摘要 75
3.4.2 用法 75
3.4.3 對象自我管理 76
3.4.4 打破循環引用 77
3.5 intrusive_ptr 79
3.5.1 類摘要 79
3.5.2 用法 80
3.5.3 引用計數器 81
3.6 pool庫概述 82
3.7 pool 82
3.7.1 類摘要 83
3.7.2 操作函數 83
3.7.3 用法 84
3.8 object_pool 85
3.8.1 類摘要 85
3.8.2 操作函數 85
3.8.3 用法 86
3.8.4 更多的構造參數 87
3.9 singleton_pool 88
3.9.1 類摘要 88
3.9.2 用法 89
3.10 總結 90
第4章 實用工具 93
4.1 noncopyable 93
4.1.1 原理 94
4.1.2 用法 94
4.1.3 實現 95
4.2 ignore_unused 96
4.2.1 基本用法 96
4.2.2 模板用法 97
4.3 optional 98
4.3.1 類摘要 98
4.3.2 操作函數 99
4.3.3 用法 100
4.3.4 工廠函數 102
4.4 assign 102
4.4.1 list_inserter 102
4.4.2 operator+= 103
4.4.3 operator () 105
4.4.4 generic_list 106
4.4.5 初始化容器 107
4.4.6 重復輸入 108
4.4.7 操作非標準容器 109
4.4.8 其他議題 110
4.5 tribool 111
4.5.1 類摘要 111
4.5.2 用法 112
4.5.3 為第三態更名 113
4.5.4 比較optional 114
4.6 operators 115
4.6.1 基本運算概念 115
4.6.2 算術操作符 116
4.6.3 基類鏈 119
4.6.4 復合運算概念 120
4.6.5 相等與等價 121
4.6.6 解引用操作符 123
4.6.7 下標操作符 124
4.6.8 布爾轉型操作符 125
4.6.9 二元操作符 126
4.7 exception 127
4.7.1 標準庫中的異常 127
4.7.2 類摘要 128
4.7.3 向異常傳遞信息 129
4.7.4 錯誤信息類 131
4.7.5 包裝標準異常 132
4.7.6 使用函數拋出異常 133
4.7.7 獲得更多信息 134
4.7.8 高級議題 135
4.8 uuid 137
4.8.1 類摘要 137
4.8.2 用法 138
4.8.3 生成器 140
4.8.4 增強用法 142
4.8.5 轉換字符串 143
4.9 config 144
4.9.1 編譯期字符串化 144
4.9.2 靜態整型常量 145
4.10 utility 145
4.10.1 二進制常量 146
4.10.2 調用函數名 147
4.11 總結 148
第5章 字符串與文本處理 151
5.1 lexical_cast 151
5.1.1 函數聲明 152
5.1.2 用法 152
5.1.3 錯誤處理 153
5.1.4 轉換要求 155
5.1.5 轉換自定義類 155
5.1.6 對比標準 156
5.2 format 157
5.2.1 簡單的例子 158
5.2.2 輸入操作符 159
5.2.3 類摘要 160
5.2.4 格式化語法 162
5.2.5 性能優化 163
5.2.6 高級用法 163
5.3 string_ref 164
5.3.1 類摘要 165
5.3.2 用法 166
5.4 string_algo 168
5.4.1 簡單示例 168
5.4.2 算法概述 169
5.4.3 大小寫轉換 170
5.4.4 判斷式(算法) 171
5.4.5 判斷式(函數對象) 172
5.4.6 分類 173
5.4.7 修剪 174
5.4.8 查找 175
5.4.9 替換與刪除 177
5.4.10 分割 178
5.4.11 合并 180
5.4.12 查找(分割)迭代器 181
5.5 xpressive 182
5.5.1 使用方式 182
5.5.2 正則表達式簡介 183
5.5.3 類摘要 184
5.5.4 正則匹配 186
5.5.5 正則查找 189
5.5.6 正則替換 190
5.5.7 正則迭代 191
5.5.8 正則分詞 192
5.5.9 高級議題 193
5.6 總結 196
第6章 正確性與測試 197
6.1 assert 197
6.1.1 基本用法 197
6.1.2 禁用斷言 198
6.1.3 擴展用法 199
6.2 static_assert 201
6.2.1 定義 201
6.2.2 用法 201
6.3 lightweight_test 203
6.3.1 測試斷言 203
6.3.2 用法 204
6.3.3 測試元編程 205
6.4 test 205
6.4.1 測試斷言 206
6.4.2 測試主體 207
6.4.3 測試實例 209
6.4.4 測試夾具 211
6.4.5 測試日志 213
6.4.6 運行參數 214
6.4.7 高級議題 215
6.5 總結 218
第7章 容器與數據結構 219
7.1 array 219
7.1.1 類摘要 220
7.1.2 操作函數 221
7.1.3 用法 222
7.1.4 能力限制 222
7.1.5 初始化 223
7.1.6 對比標準 223
7.2 dynamic_bitset 224
7.2.1 類摘要 224
7.2.2 創建與賦值 225
7.2.3 容器操作 227
7.2.4 基本運算 228
7.2.5 訪問元素 228
7.2.6 類型轉換 230
7.2.7 集合操作 231
7.2.8 綜合運用 231
7.3 unordered 233
7.3.1 散列集合簡介 233
7.3.2 散列集合的用法 235
7.3.3 散列映射簡介 237
7.3.4 散列映射的用法 239
7.3.5 高級議題 240
7.4 bimap 242
7.4.1 類摘要 242
7.4.2 基本用法 243
7.4.3 值的集合類型 245
7.4.4 集合類型的用法 246
7.4.5 使用標簽類型 247
7.4.6 使用assign庫 249
7.4.7 查找與替換 249
7.4.8 投射 251
7.4.9 高級議題 252
7.5 circular_buffer 253
7.5.1 類摘要 253
7.5.2 用法 254
7.5.3 環形結構 255
7.5.4 空間優化 256
7.6 tuple 257
7.6.1 二元組 257
7.6.2 類摘要 258
7.6.3 創建與賦值 258
7.6.4 訪問元素 260
7.6.5 比較操作 261
7.6.6 輸入輸出 262
7.6.7 聯結變量 263
7.6.8 內部結構 263
7.6.9 使用訪問者模式 265
7.6.10 高級議題 266
7.7 any 269
7.7.1 類摘要 269
7.7.2 訪問元素 270
7.7.3 用法 271
7.7.4 簡化操作 272
7.7.5 保存指針 273
7.7.6 高級議題 274
7.8 variant 275
7.8.1 類摘要 276
7.8.2 訪問元素 277
7.8.3 用法 277
7.8.4 訪問器 278
7.8.5 高級議題 281
7.9 multi_array 283
7.9.1 類摘要 283
7.9.2 用法 284
7.9.3 改變形狀和大小 286
7.9.4 創建子視圖 287
7.9.5 適配普通數組 288
7.9.6 高級議題 289
7.10 property_tree 291
7.10.1 類摘要 292
7.10.2 讀取配置信息 293
7.10.3 寫入配置信息 295
7.10.4 更多用法 296
7.10.5 數據格式 297
7.10.6 高級議題 300
7.11 總結 301
第8章 算法 305
8.1 foreach 305
8.1.1 用法 306
8.1.2 詳細解說 307
8.1.3 更優雅的名字 308
8.1.4 支持的序列類型 308
8.1.5 存在的問題 309
8.2 minmax 310
8.2.1 用法 310
8.2.2 存在的問題 311
8.3 minmax_element 312
8.3.1 基本用法 312
8.3.2 其他用法 313
8.4 algorithm 313
8.4.1 clamp 314
8.4.2 clamp_range 314
8.4.3 hex/unhex 315
8.5 總結 316
第9章 數學與數字 317
9.1 math.constants 317
9.1.1 基本用法 318
9.1.2 高級用法 319
9.2 integer 319
9.2.1 整數特征 319
9.2.2 標準整數類型 321
9.2.3 整數類型模板類 322
9.3 rational 326
9.3.1 類摘要 326
9.3.2 創建與賦值 327
9.3.3 基本運算 328
9.3.4 類型轉換 328
9.3.5 其他議題 329
9.4 ratio 330
9.4.1 類摘要 330
9.4.2 用法 331
9.4.3 數字單位 331
9.4.4 字符串表示 333
9.5 crc 334
9.5.1 類摘要 334
9.5.2 預定義的實現類 335
9.5.3 用法 335
9.6 random 336
9.6.1 隨機數發生器 337
9.6.2 隨機數分布器 338
9.6.3 變量發生器 343
9.6.4 產生隨機數據塊 344
9.6.5 真隨機數發生器 345
9.7 總結 347
第10章 操作系統相關 349
10.1 system 349
10.1.1 錯誤值 350
10.1.2 錯誤類別 350
10.1.3 錯誤代碼 352
10.1.4 錯誤異常 354
10.2 chrono 355
10.2.1 時間長度 355
10.2.2 使用時間長度 357
10.2.3 時鐘 358
10.2.4 時間點 360
10.2.5 綜合運用 362
10.3 cpu_timer 364
10.3.1 時間類型 364
10.3.2 cpu_timer 365
10.3.3 auto_cpu_timer 366
10.3.4 定制輸出格式 367
10.4 filesystem 369
10.4.1 類摘要 369
10.4.2 路徑表示 371
10.4.3 可移植的文件名 372
10.4.4 路徑處理 373
10.4.5 異常處理 376
10.4.6 文件狀態 377
10.4.7 文件屬性 379
10.4.8 文件操作 380
10.4.9 迭代目錄 381
10.4.10 實例1 383
10.4.11 實例2 384
10.4.12 實例3 386
10.4.13 文件流操作 388
10.5 program_options 388
10.5.1 概述 389
10.5.2 選項值 391
10.5.3 選項描述器 393
10.5.4 選項描述器的用法 394
10.5.5 分析器 396
10.5.6 存儲器 397
10.5.7 位置選項值 398
10.5.8 環境變量 400
10.5.9 分組選項信息 401
10.5.10 高級用法 403
10.6 總結 406
第11章 函數與回調 409
11.1 ref 409
11.1.1 類摘要 410
11.1.2 基本用法 411
11.1.3 工廠函數 411
11.1.4 操作包裝 412
11.1.5 綜合應用 413
11.1.6 對比標準 414
11.2 bind 415
11.2.1 工作原理 416
11.2.2 操作普通函數 417
11.2.3 操作成員函數 418
11.2.4 操作成員變量 419
11.2.5 操作函數對象 420
11.2.6 對比標準 421
11.2.7 高級議題 422
11.3 function 426
11.3.1 類摘要 426
11.3.2 聲明形式 427
11.3.3 操作函數 428
11.3.4 用法 429
11.3.5 使用ref庫 430
11.3.6 用于回調 431
11.3.7 對比標準 433
11.4 signals2 435
11.4.1 類摘要 435
11.4.2 操作函數 436
11.4.3 用法 437
11.4.4 返回值 439
11.4.5 合并器 440
11.4.6 管理信號連接 442
11.4.7 更靈活地管理信號連接 443
11.4.8 自動管理連接 445
11.4.9 應用于觀察者模式 447
11.4.10 高級議題 449
11.5 總結 454
第12章 并發編程 457
12.1 atomic 457
12.1.1 類摘要 458
12.1.2 基本用法 460
12.1.3 整數用法 461
12.1.4 并發順序一致性 462
12.2 thread 465
12.2.1 mutex 466
12.2.2 lock_guard 468
12.2.3 unique_lock 469
12.2.4 lock adapter 472
12.2.5 線程對象 474
12.2.6 使用線程 475
12.2.7 中斷線程 478
12.2.8 線程組 482
12.2.9 call_once 483
12.2.10 condition_variable 484
12.2.11 shared_mutex 488
12.2.12 future 490
12.2.13 shared_future 493
12.2.14 高級議題 494
12.3 asio 498
12.3.1 概述 499
12.3.2 信號 505
12.3.3 定時器 510
12.3.4 網絡通信 515
12.3.5 同步通信 521
12.3.6 異步通信 524
12.3.7 域名解析 529
12.3.8 使用協程 532
12.3.9 其他議題 534
12.4 總結 538
第13章 組件速覽 541
13.1 算法 541
13.2 字符串與文本處理 542
13.3 容器與數據結構 543
13.4 迭代器 544
13.5 函數對象與高級編程 544
13.6 泛型編程 546
13.7 模板元編程 547
13.8 預處理元編程 548
13.9 并發編程 549
13.10 數學與數字 550
13.11 輸入輸出 551
13.12 系統相關 552
13.13 語言特性模擬 553
13.14 雜項 553
13.15 總結 555
第14章 設計模式 557
14.1 創建型模式 558
14.2 結構型模式 559
14.3 行為模式 562
14.4 其他模式 565
14.5 總結 567
第15章 結束語 569
15.1 未臻完美 569
15.2 錦上添花 570
15.3 工夫在詩外 572
15.4 臨別贈言 573
附錄A 推薦書目 575
附錄B 標準簡述 577
附錄C 關鍵字淺談 581