本書幫助讀者深入理解現(xiàn)代C++編程,全書供10章。第1章和第2章全面系統(tǒng)地介紹C++11/14/17/20的語言新增功能及其應(yīng)用;第3章介紹面向?qū)ο蟮募夹g(shù);第4章至第6章系統(tǒng)地介紹標準模板庫(STL)的主要組成,如模板、容器、算法函數(shù)等;第7章介紹智能指針與內(nèi)存管理;在第8章和第9章介紹并發(fā)編程和并行算法,以及CUDA并行計算平臺的入門編程知識;第10章介紹軟件設(shè)計模式。
杭小樹,男,2002年在中國科學技術(shù)大學獲模式識別與智能系統(tǒng)專業(yè)博士學位,2006年在澳大利亞迪肯大學(Deakin University)獲計算機科學與技術(shù)專業(yè)哲學博士,2019年通過高層次人才引進回國,先后在浙江、江蘇兩省從事智能機器人方面的研發(fā)工作。現(xiàn)為江蘇省產(chǎn)業(yè)技術(shù)研究院研究員、江蘇集萃智能制造技術(shù)研究所有限公司總經(jīng)理,獲南京市B類人才和江蘇省創(chuàng)新人才等榮譽。
目 錄
第1章 語言新增功能 1
1.1 C++11新增的語言功能 1
1.2 C++14新增的語言功能 18
1.3 C++17新增的語言功能 20
1.4 C++20新增的語言功能 24
1.6 本章小結(jié) 30
第2章 lambda表達式 33
2.1 C++11中的lambda表達式 33
2.2 C++14對lambda表達式的擴展
2.2.1 lambda捕獲初始化 38
2.2.2 泛型lambda表達式 39
2.2.3 默認參數(shù) 40
2.3 C++17對lambda表達式的擴展 42
2.3.1 常量lambda表達式 42
2.3.2 按值捕獲this指針 43
2.4 C++20對lambda表達式的擴展 44
2.4.1 lambda模板語法 44
2.4.2 lambda參數(shù)包捕獲 44
2.5 本章小結(jié) 45
第3章 面向?qū)ο蟮募夹g(shù) 47
3.1 構(gòu)造函數(shù)與析構(gòu)函數(shù) 47
3.1.1 轉(zhuǎn)換構(gòu)造函數(shù)和顯式構(gòu)造函數(shù) 48
3.1.2 拷貝構(gòu)造函數(shù) 49
3.1.3 拷貝賦值運算符 50
3.1.4 移動構(gòu)造函數(shù) 51
3.1.5 移動賦值運算符 52
3.1.6 委派構(gòu)造函數(shù) 53
3.1.7 繼承構(gòu)造函數(shù) 53
3.1.8 顯式默認函數(shù)和顯式刪除函數(shù) 54
3.1.9 私有構(gòu)造函數(shù) 55
3.2 虛函數(shù)與多態(tài)性 56
3.2.1 虛函數(shù)表和虛函數(shù)指針 58
3.2.2 顯式重寫和終止重寫 58
3.2.3 常量表達式虛函數(shù) 59
3.3 重載 61
3.3.1 重載賦值運算符 61
3.3.2 函數(shù)調(diào)用運算符的重載 62
3.4 繼承 63
3.4.1 多重繼承 63
3.4.2 多級繼承 64
3.4.3 虛繼承 65
3.5 其他雜項 66
3.5.1 左值引用和右值引用 66
3.5.2 移動語義 67
3.5.3 引用限定符 69
3.6 本章小結(jié) 71
第4章 模板 73
4.1 函數(shù)模板 74
4.1.1 函數(shù)模板實例化 75
4.1.2 函數(shù)模板實參推導 76
4.1.3 顯式函數(shù)模板實參 76
4.1.4 函數(shù)模板實參替換 77
4.1.5 函數(shù)模板實參重寫 77
4.1.6 參數(shù)包 79
4.1.7 折疊表達式 80
4.2 類模板 81
4.2.1 顯式類模板實例化 82
4.2.2 隱式類模板實例化 82
4.2.3 類模板形參和類模板實參 84
4.2.4 類模板實參推導 85
4.2.5 非類型模板參數(shù)中的類類型 85
4.2.6 用auto聲明非類型模板參數(shù) 85
4.3 類型別名和別名模板 86
4.4 變量模板 88
4.5 概念與約束 89
4.5.1 概念 89
4.5.2 約束 91
4.5.3 約束表達式 93
4.6 本章小結(jié) 96
第5章 STL容器 99
5.1 順序容器 99
5.1.1 std::array 100
5.1.2 std::vector 101
5.1.3 std::list 103
5.1.4 std::forward_list 105
5.1.5 std::deque 107
5.2 關(guān)聯(lián)容器 108
5.2.1 std::set 109
5.2.2 std::multiset 110
5.2.3 std::map 111
5.2.4 std::multimap 113
5.3 無序關(guān)聯(lián)容器 113
5.3.1 std::unordered_set 114
5.3.2 std::unordered_map 115
5.3.3 std::unordered_multiset 117
5.3.4 std::unordered_multisetmap 119
5.4 容器適配器 120
5.4.1 std::stack 120
5.4.2 std::queue 121
5.4.3 std::priority_queue 122
5.5 分配器與迭代器 126
5.5.1 std::allocator 126
5.5.2 迭代器 126
5.5.3 迭代器失效 127
5.6 本章小結(jié) 127
第6章 STL函數(shù) 129
6.1 算法函數(shù) 129
6.1.1 排序算法 129
6.1.2 搜索算法 130
6.1.3 非更改順序算法 131
6.1.4 更改順序算法 135
6.1.5 分割算法 140
6.1.6 合并算法 141
6.1.7 堆算法 142
6.1.8 最大最小值算法 144
6.1.9 數(shù)值算法 146
6.2 函數(shù)對象 148
6.2.1 std::greater和std::less 149
6.2.2 std::reference_wrapper 149
6.2.3 std::ref和std::cref 150
6.3 Utility函數(shù) 151
6.3.1 std::move 151
6.3.2 std::forward 152
6.3.3 std::swap 153
6.3.4 std::make_pair 153
6.4 回調(diào)函數(shù) 154
6.4.1 回調(diào)函數(shù)的基本概念 154
6.4.2 使用普通函數(shù)實現(xiàn)回調(diào)函數(shù) 154
6.4.3 使用函數(shù)指針實現(xiàn)回調(diào)函數(shù) 155
6.4.4 使用函數(shù)對象實現(xiàn)回調(diào)函數(shù) 155
6.4.5 將lambda表達式傳入回調(diào)函數(shù) 157
6.4.6 使用std::bind實現(xiàn)回調(diào)函數(shù) 158
6.4.7 使用std::function實現(xiàn)回調(diào)函數(shù) 159
6.5 本章小結(jié) 162
第7章 智能指針與內(nèi)存管理 165
7.1 堆棧和內(nèi)存分配 165
7.2 指針與內(nèi)存泄漏 166
7.3 分段錯誤 168
7.4 智能指針 169
7.4.1 std::unique_ptr 170
7.4.2 std::shared_ptr 177
7.4.3 std::weak_ptr 183
7.5 本章小結(jié) 185
第8章 并發(fā)與多線程 187
8.1 并發(fā)與并行 187
8.2 創(chuàng)建線程 188
8.3 線程同步與互斥 192
8.3.1 std::mutex 192
8.3.2 std::condition_variable 193
8.3.3 std::lock_guard和std::unique_lock 194
8.3.4 std::atomic 199
8.4 線程死鎖 200
8.4.1 std::lock 200
8.4.2 std::scoped_lock 203
8.5 STL中的<future> 204
8.5.1 std::async 204
8.5.2 std::future 206
8.5.3 std::promise 207
8.5.4 std::packaged_task 208
8.6 線程池 210
8.7 本章小結(jié) 213
第9章 并行算法與并行計算 215
9.1 STL并行算法 215
9.1.1 std::execution::seq 215
9.1.2 std::execution::par 215
9.1.3 std::execution::par_unseq 216
9.1.4 std::execution::unseq 216
9.2 常用的并行算法 217
9.2.1 std::sort 217
9.2.2 std::transform 218
9.2.3 std::find、std::find_if和std::find_if_not 219
9.2.4 std::search 220
9.3 C++17中新增的并行算法 221
9.3.1 std::for_each和std::for_each_n 222
9.3.2 std::reduce和std::transform_reduce 223
9.3.3 std::exclusive_scan和std::inclusive_scan 227
9.3.4 std::transform_exclusive_scan和std::transform_inclusive_scan 229
9.4 CUDA并行計算編程 230
9.5 OpenCL編程 237
9.6 本章小結(jié) 244
第10章 設(shè)計模式 247
10.1 設(shè)計模式概念 247
10.2 創(chuàng)建設(shè)計模式 248
10.2.1 工廠方法 249
10.2.2 抽象工廠方法 251
10.2.3 構(gòu)建器方法 253
10.2.4 原型方法 257
10.2.5 單例方法 259
10.3 結(jié)構(gòu)設(shè)計模式 261
10.3.1 適配器方法 261
10.3.2 橋接方法 263
10.3.3 組合方法 265
10.3.4 裝飾器方法 269
10.3.5 門面方法 271
10.3.6 代理方法 274
10.3.7 蠅量級方法 276
10.4 行為設(shè)計模式 279
10.4.1 責任鏈方法 279
10.4.2 迭代器方法 282
10.4.3 中介器方法 285
10.4.4 備忘錄方法 288
10.4.5 觀察者方法 291
10.4.6 狀態(tài)方法 295
10.4.7 策略方法 297
10.4.8 模板方法 299
10.4.9 命令方法 302
10.4.10 訪客方法 306
10.5 本章小結(jié) 310
參考文獻 311