本書幫助讀者深入理解現(xiàn)代C++編程,全書供10章。第1章和第2章全面系統(tǒng)地介紹C++11/14/17/20的語言新增功能及其應(yīng)用;第3章介紹面向?qū)ο蟮募夹g(shù);第4章至第6章系統(tǒng)地介紹標(biāo)準(zhǔn)模板庫(kù)(STL)的主要組成,如模板、容器、算法函數(shù)等;第7章介紹智能指針與內(nèi)存管理;在第8章和第9章介紹并發(fā)編程和并行算法,以及CUDA并行計(jì)算平臺(tái)的入門編程知識(shí);第10章介紹軟件設(shè)計(jì)模式。
杭小樹,男,2002年在中國(guó)科學(xué)技術(shù)大學(xué)獲模式識(shí)別與智能系統(tǒng)專業(yè)博士學(xué)位,2006年在澳大利亞迪肯大學(xué)(Deakin University)獲計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)哲學(xué)博士,2019年通過高層次人才引進(jìn)回國(guó),先后在浙江、江蘇兩省從事智能機(jī)器人方面的研發(fā)工作。現(xiàn)為江蘇省產(chǎn)業(yè)技術(shù)研究院研究員、江蘇集萃智能制造技術(shù)研究所有限公司總經(jīng)理,獲南京市B類人才和江蘇省創(chuàng)新人才等榮譽(yù)。
目 錄
第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表達(dá)式 33
2.1 C++11中的lambda表達(dá)式 33
2.2 C++14對(duì)lambda表達(dá)式的擴(kuò)展
2.2.1 lambda捕獲初始化 38
2.2.2 泛型lambda表達(dá)式 39
2.2.3 默認(rèn)參數(shù) 40
2.3 C++17對(duì)lambda表達(dá)式的擴(kuò)展 42
2.3.1 常量lambda表達(dá)式 42
2.3.2 按值捕獲this指針 43
2.4 C++20對(duì)lambda表達(dá)式的擴(kuò)展 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 拷貝賦值運(yùn)算符 50
3.1.4 移動(dòng)構(gòu)造函數(shù) 51
3.1.5 移動(dòng)賦值運(yùn)算符 52
3.1.6 委派構(gòu)造函數(shù) 53
3.1.7 繼承構(gòu)造函數(shù) 53
3.1.8 顯式默認(rèn)函數(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 常量表達(dá)式虛函數(shù) 59
3.3 重載 61
3.3.1 重載賦值運(yùn)算符 61
3.3.2 函數(shù)調(diào)用運(yùn)算符的重載 62
3.4 繼承 63
3.4.1 多重繼承 63
3.4.2 多級(jí)繼承 64
3.4.3 虛繼承 65
3.5 其他雜項(xiàng) 66
3.5.1 左值引用和右值引用 66
3.5.2 移動(dòng)語義 67
3.5.3 引用限定符 69
3.6 本章小結(jié) 71
第4章 模板 73
4.1 函數(shù)模板 74
4.1.1 函數(shù)模板實(shí)例化 75
4.1.2 函數(shù)模板實(shí)參推導(dǎo) 76
4.1.3 顯式函數(shù)模板實(shí)參 76
4.1.4 函數(shù)模板實(shí)參替換 77
4.1.5 函數(shù)模板實(shí)參重寫 77
4.1.6 參數(shù)包 79
4.1.7 折疊表達(dá)式 80
4.2 類模板 81
4.2.1 顯式類模板實(shí)例化 82
4.2.2 隱式類模板實(shí)例化 82
4.2.3 類模板形參和類模板實(shí)參 84
4.2.4 類模板實(shí)參推導(dǎo) 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 約束表達(dá)式 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ù)對(duì)象 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ù)實(shí)現(xiàn)回調(diào)函數(shù) 154
6.4.3 使用函數(shù)指針實(shí)現(xiàn)回調(diào)函數(shù) 155
6.4.4 使用函數(shù)對(duì)象實(shí)現(xiàn)回調(diào)函數(shù) 155
6.4.5 將lambda表達(dá)式傳入回調(diào)函數(shù) 157
6.4.6 使用std::bind實(shí)現(xiàn)回調(diào)函數(shù) 158
6.4.7 使用std::function實(shí)現(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 分段錯(cuò)誤 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章 并行算法與并行計(jì)算 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并行計(jì)算編程 230
9.5 OpenCL編程 237
9.6 本章小結(jié) 244
第10章 設(shè)計(jì)模式 247
10.1 設(shè)計(jì)模式概念 247
10.2 創(chuàng)建設(shè)計(jì)模式 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è)計(jì)模式 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 蠅量級(jí)方法 276
10.4 行為設(shè)計(jì)模式 279
10.4.1 責(zé)任鏈方法 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
參考文獻(xiàn) 311