第0章 導讀 1
0.1 關於本書 1
0.2 讀者對象 2
0.3 C++標準 3
0.4 開發環境 3
0.5 代碼風格 3
0.6 本書的結構 4
0.7 如何閱讀本書 5
0.8 本書的源碼 6
第1章 全新的C++語言 7
1.1 概述 8
1.2 左值與右值 9
1.2.1 定義 9
1.2.2 右值引用 10
1.2.3 轉移語義 11
1.2.4 完美轉發 12
1.3 自動類型推導 13
1.3.1 auto 13
1.3.2 decltype 15
1.3.3 decltype(auto) 17
1.4 麵嚮過程編程 17
1.4.1 空指針 17
1.4.2 初始化 18
1.4.3 新式for循環 19
1.4.4 新式函數聲明 20
1.5 麵嚮對象編程 21
1.5.1 default 21
1.5.2 delete 22
1.5.3 override 23
1.5.4 final 24
1.5.5 成員初始化 25
1.5.6 委托構造 26
1.6 泛型編程 27
1.6.1 類型彆名 27
1.6.2 編譯期常量 28
1.6.3 靜態斷言 29
1.6.4 可變參數模闆 29
1.7 函數式編程 31
1.7.1 lambda錶達式31
1.7.2 捕獲外部變量 32
1.7.3 類型轉換 34
1.7.4 泛型的lambda錶達式 35
1.8 並發編程 35
1.9 麵嚮安全編程 37
1.9.1 無異常保證 37
1.9.2 內聯名字空間 37
1.9.3 強類型枚舉 38
1.9.4 屬性 39
1.10 更多特性 39
1.10.1 語言版本號 39
1.10.2 超長整型 40
1.10.3 原始字符串 40
1.10.4 自定義字麵值 41
1.10.5 雜項 43
1.11 總結 44
第2章 模闆元編程簡介 45
2.1 概述 45
2.2 語法元素 46
2.3 元數據 46
2.4 元函數 47
2.5 元函數轉發 49
2.6 易用的工具宏 50
2.7 應用示例 51
2.8 總結 52
第3章 類型特徵萃取 55
3.1 概述 55
3.2 元數據類彆 56
3.2.1 基本類彆 56
3.2.2 復閤類彆 58
3.3 元數據屬性 60
3.3.1 基本屬性 60
3.3.2 類相關屬性 61
3.3.3 操作符重載屬性 62
3.4 元數據關係 62
3.5 元數據運算 63
3.5.1 基本運算 63
3.5.2 特殊運算 65
3.6 解析函數元數據 67
3.7 實現原理 68
3.7.1 integral_constant 68
3.7.2 is_integral 69
3.8 應用示例 70
3.8.1 conditional 70
3.8.2 identity_type 71
3.8.3 declval 72
3.9 總結 73
第4章 實用工具 75
4.1 compressed_pair 75
4.1.1 空類 75
4.1.2 類摘要 77
4.1.3 構造與賦值 78
4.1.4 用法 78
4.1.5 實現原理 79
4.1.6 功能擴展 80
4.2 checked_delete 83
4.2.1 函數的用法 84
4.2.2 函數對象的用法 85
4.2.3 帶檢查的刪除 87
4.2.4 實現原理 89
4.2.5 使用建議 90
4.3 addressof 90
4.3.1 用法 91
4.3.2 實現原理 92
4.3.3 使用建議 93
4.4 base_from_member 93
4.4.1 類摘要 93
4.4.2 用法 94
4.4.3 進一步的用法 96
4.5 conversion 98
4.5.1 標準轉型操作符 98
4.5.2 多態對象的轉型 99
4.5.3 polymorphic_downcast 101
4.5.4 polymorphic_cast 102
4.5.5 對引用轉型 103
4.6 numeric conversion 104
4.6.1 bounds 104
4.6.2 numeric_cast 107
4.7 pointer 108
4.7.1 get_pointer 108
4.7.2 pointer_cast 109
4.7.3 pointee 110
4.7.4 indirect_reference 111
4.7.5 pointer_to_other 111
4.7.6 compare_pointees 113
4.7.7 pointer_traits 114
4.8 總結 115
第5章 迭代器 117
5.1 概述 117
5.1.1 迭代器模式 117
5.1.2 標準迭代器 118
5.1.3 新式迭代器 119
5.1.4 標準迭代器工具120
5.1.5 迭代器與算法 122
5.2 next_prior 122
5.2.1 函數聲明 123
5.2.2 用法 124
5.2.3 C++11/14標準125
5.3 iterator_traits 125
5.3.1 標準迭代器特徵類126
5.3.2 類摘要 127
5.3.3 用法 127
5.4 iterator_facade 128
5.4.1 迭代器的核心操作128
5.4.2 類摘要 129
5.4.3 用法 131
5.5 iterator_adaptor 135
5.5.1 類摘要 135
5.5.2 用法 136
5.6 迭代器工具 139
5.6.1 共享容器迭代器139
5.6.2 發生器迭代器 141
5.6.3 逆嚮迭代器 143
5.6.4 間接迭代器 144
5.6.5 計數迭代器 145
5.6.6 函數輸入迭代器148
5.6.7 函數輸齣迭代器151
5.6.8 過濾迭代器 153
5.6.9 轉換迭代器 155
5.6.10 索引迭代器 157
5.6.11 組閤迭代器 159
5.7 總結 161
第6章 區間 163
6.1 概述 163
6.2 特徵元函數 164
6.3 操作函數 165
6.4 標準算法 166
6.4.1 返迴原區間的算法167
6.4.2 返迴定製區間的算法168
6.5 迭代器區間類 170
6.5.1 類摘要 170
6.5.2 用法 171
6.6 輔助工具 173
6.6.1 sub_range 173
6.6.2 counting_range 174
6.6.3 istream_range 174
6.6.4 irange 175
6.6.5 combined_range 175
6.6.6 any_range 176
6.7 適配器 178
6.7.1 適配器列錶 178
6.7.2 用法 179
6.7.3 實現原理 180
6.8 其他議題 181
6.8.1 自定義區間類型181
6.7.2 連接區間 182
6.9 總結 182
第7章 函數對象 185
7.1 hash 185
7.1.1 類摘要 186
7.1.2 用法 186
7.1.3 實現原理 187
7.1.4 擴展hash 188
7.2 mem_fn 191
7.2.1 工作原理 191
7.2.2 用法 192
7.2.3 其他議題 193
7.3 factory 194
7.3.1 類摘要 194
7.3.2 用法 195
7.3.3 value_factory 197
7.4 總結 197
第8章 指針容器 199
8.1 概述 199
8.1.1 入門示例 200
8.1.2 指針容器的優缺點203
8.1.3 可剋隆概念 204
8.1.4 剋隆分配器 205
8.1.5 指針容器的分類206
8.2 指針容器的共通功能208
8.2.1 模闆參數 208
8.2.2 構造與賦值 210
8.2.3 訪問元素 211
8.2.4 其他功能 213
8.3 序列指針容器適配器214
8.3.1 配置元函數 214
8.3.2 類摘要 215
8.3.3 接口解說 216
8.3.4 代碼示例 216
8.4 ptr_vector 217
8.4.1 類摘要 218
8.4.2 用法 219
8.5 空指針處理 220
8.5.1 禁用空指針 220
8.5.2 使用空指針 220
8.5.3 空對象模式 221
8.6 關聯指針容器的共通功能223
8.6.1 類摘要 223
8.6.2 接口解說 224
8.7 集閤指針容器適配器225
8.7.1 配置元函數 225
8.7.2 ptr_set_adapter 226
8.8 ptr_set 227
8.8.1 類摘要 227
8.8.2 用法 228
8.9 ptr_unordered_set 228
8.9.1 類摘要 228
8.9.2 用法 229
8.10 映射指針容器適配器230
8.10.1 配置元函數 230
8.10.2 ptr_map_adapter 231
8.11 ptr_map 233
8.11.1 類摘要 233
8.11.2 用法 234
8.12 ptr_unordered_map 234
8.12.1 類摘要 235
8.12.2 用法 235
8.13 使用assign庫 236
8.13.1 嚮容器添加元素236
8.13.2 初始化容器元素237
8.14 使用算法 238
8.14.1 標準算法 238
8.14.2 序列指針容器的算法242
8.14.3 關聯指針容器的算法244
8.15 其他議題 246
8.15.1 異常 247
8.15.2 間接函數對象 247
8.15.3 插入迭代器 248
8.15.4 使用視圖分配器248
8.15.5 可剋隆性的再討論249
8.16 總結 250
第9章 侵入式容器 251
9.1 概述 251
9.1.1 手工實現鏈錶 252
9.1.2 intrusive庫介紹 253
9.2 入門示例 254
9.2.1 使用基類掛鈎 254
9.2.2 使用成員掛鈎 255
9.3 基本概念 257
9.3.1 節點 257
9.3.2 節點特徵 258
9.3.3 節點算法 258
9.3.4 值特徵 260
9.3.5 掛鈎 260
9.3.6 選項 262
9.3.7 處置器 263
9.3.8 剋隆 264
9.4 鏈錶 264
9.4.1 節點和算法 265
9.4.2 基類掛鈎 266
9.4.3 成員掛鈎 267
9.4.4 類摘要 267
9.4.5 基本用法 269
9.4.6 特有用法 271
9.5 有序集閤 275
9.5.1 節點和算法 275
9.5.2 基類掛鈎 276
9.5.3 成員掛鈎 277
9.5.4 set類摘要 277
9.5.5 基本用法 279
9.5.6 特有用法 280
9.6 無序集閤 282
9.6.1 節點和算法 282
9.6.2 基類掛鈎 283
9.6.3 成員掛鈎 284
9.6.4 類摘要 284
9.6.5 基本用法 286
9.6.6 unordered_set的特有用法 288
9.7 其他議題 290
9.7.1 鏈接模式 290
9.7.2 同時使用多個掛鈎291
9.7.3 萬能掛鈎 293
9.8 總結 293
第10章 多索引容器 295
10.1 概述 295
10.2 入門示例 296
10.2.1 簡單的例子 296
10.2.2 復雜的例子 297
10.2.3 更復雜的例子299
10.3 基本概念 302
10.3.1 索引 302
10.3.2 索引說明 303
10.3.3 鍵提取器 304
10.3.4 索引說明列錶304
10.3.5 索引標簽 305
10.3.6 多索引容器 305
10.4 鍵提取器 306
10.4.1 定義 306
10.4.2 identity 307
10.4.3 member 308
10.4.4 const_mem_fun 310
10.4.5 mem_fun 311
10.4.6 global_fun 312
10.4.7 自定義鍵提取器313
10.5 序列索引 313
10.5.1 索引說明 313
10.5.2 類摘要 314
10.5.3 用法 315
10.6 隨機訪問索引 317
10.6.1 索引說明 317
10.6.2 類摘要 317
10.6.3 用法 318
10.7 有序索引 320
10.7.1 索引說明 320
10.7.2 類摘要 320
10.7.3 基本用法 322
10.7.4 高級用法 323
10.8 散列索引 326
10.8.1 索引說明 326
10.8.2 類摘要 326
10.8.3 用法 327
10.9 修改元素 329
10.9.1 替換元素 329
10.9.2 修改元素 330
10.9.3 修改鍵 332
10.10 多索引容器 333
10.10.1 類摘要 333
10.10.2 用法 334
10.11 組閤索引鍵 337
10.11.1 類摘要 337
10.11.2 用法 338
10.11.3 輔助工具 339
10.12 總結 341
第11章 流處理 343
11.1 概述 343
11.1.1 標準庫的流處理343
11.1.2 Boost的流處理345
11.2 入門示例 346
11.2.1 示例1 346
11.2.2 示例2 347
11.3 設備的特徵 349
11.3.1 設備的字符類型349
11.3.2 設備的模式 349
11.3.3 設備的分類 350
11.4 設備 351
11.4.1 概述 351
11.4.2 數組設備 352
11.4.3 標準容器設備354
11.4.4 文件設備 355
11.4.5 空設備 357
11.5 過濾器 358
11.5.1 概述 358
11.5.2 設備鏈和管道359
11.5.3 計數過濾器 361
11.5.4 換行過濾器 362
11.5.5 正則錶達式過濾器(Ⅰ) 364
11.5.6 正則錶達式過濾器(Ⅱ) 366
11.5.7 壓縮過濾器 368
11.6 流 369
11.6.1 基本流 370
11.6.2 過濾流 371
11.7 流處理函數 373
11.8 定製設備 374
11.8.1 定製源設備 374
11.8.2 定製接收設備377
11.9 定製過濾器 377
11.9.1 過濾器的實現原理378
11.9.2 aggregate_filter 379
11.9.3 basic_line_filter 380
11.9.4 手工打造過濾器381
11.10 組閤設備 385
11.10.1 combine 385
11.10.2 compose 386
11.10.3 invert 387
11.10.4 restrict 389
11.10.5 tee 390
11.11 其他議題 391
11.11.1 對象的生存周期391
11.11.2 與迭代器的比較391
11.12 總結 392
第12章 泛型編程 395
12.1 enable_if 395
12.1.1 類摘要 396
12.1.2 應用於模闆函數397
12.1.3 應用於模闆類398
12.1.4 對比C++11標準 399
12.2 call_traits 399
12.2.1 類摘要 399
12.2.2 用法 400
12.2.3 實現原理 402
12.3 concept_check 403
12.3.1 概述 404
12.3.2 基本概念檢查405
12.3.3 函數對象概念檢查405
12.3.4 標準迭代器概念檢查406
12.3.5 新式迭代器概念檢查407
12.3.6 容器概念檢查409
12.3.7 區間概念檢查411
12.3.8 在函數聲明中的概念檢查 411
12.3.9 概念原型類 413
12.4 總結 414
第13章 模闆元編程 415
13.1 概述 415
13.2 整數類型 416
13.2.1 簡介 416
13.2.2 整數類型 418
13.2.3 bool類型419
13.2.4 基本運算 419
13.3 流程控製 421
13.3.1 if_和if_c421
13.3.2 eval_if和eval_if_c422
13.4 容器 423
13.4.1 簡介 424
13.4.2 vector 425
13.4.3 string 426
13.4.4 map 427
13.4.5 相關元函數 428
13.5 迭代器 429
13.5.1 簡介 429
13.5.2 相關元函數 430
13.6 算法 431
13.6.1 插入器 431
13.6.2 查詢算法 432
13.6.3 變換算法 433
13.6.4 運行時算法 434
13.7 高級用法 435
13.7.1 高階元數據 436
13.7.2 占位符 437
13.7.3 bind錶達式437
13.7.4 lambda錶達式438
13.7.5 算法的高級應用439
13.8 斷言 441
13.8.1 基本斷言 442
13.8.2 否定斷言 442
13.8.3 關係斷言 443
13.8.4 定製消息的斷言443
13.9 實例研究 444
13.9.1 泛型編程版本444
13.9.2 元編程第1版 446
13.9.3 元編程第2版 449
13.10 總結 450
第14章 預處理元編程 453
14.1 概述 453
14.1.1 元數據 454
14.1.2 基本語法 454
14.1.3 特殊符號 456
14.1.4 特殊操作符 456
14.2 整數運算 457
14.3 常用元函數 458
14.3.1 ASSERT 458
14.3.2 IF 459
14.3.3 ENUM 459
14.3.4 REPEAT 460
14.4 高級數據結構 461
14.5 總結 462
第15章 現代C++開發淺談 463
15.1 基本原則 463
15.2 內存管理 467
15.3 容器、迭代器和算法468
15.4 其他 469
15.5 結束語 471
附錄A 推薦書目 473
附錄B Boost程序庫組件索引 475
附錄C Boost程序庫安裝簡介 485
· · · · · · (
收起)