C++是一門涵蓋面向底層也是面向高層的編程語言,。多數(shù)的時候,我們都是拿C++來開發(fā)大型項目,。然而C++語言本身并不攜帶大量的庫函數(shù),,為了應對大量的開發(fā),提高開發(fā)效率,,我們一般都要學習標準模板庫STL的,。STL的各種容器算法可以涵蓋我們絕大多數(shù)需要使用的數(shù)據(jù)模型,而且因為封裝良好,,運行效率很高,,而且代碼使用起來也都很統(tǒng)一。從代碼角度來講,,我們可以極大精簡代碼,,從運行性能來講,我們可以大大提高運行效率。當然,。如果你不會使用STL這個工具,那么都基于最原始的方式來發(fā),,那開發(fā)效率和運行效率應該就不好說了,。對于大多數(shù)普通程序員來講,通常都不如STL寫的好,,畢竟STL都是高手寫好的庫哦,。
你可以看到各種開源庫和各種C++大型項目,到處充斥著STL的東西,,就是C#,、Java也大量使用容器什么的。然而作為高效率的C++開發(fā),,如果不掌握STL,,那么C++開發(fā)自然也就優(yōu)勢大減,很難做到基于語言的快速開發(fā),。所以說,,使用C++必然要掌握STL。當然如果你只是想打打醬油,,不想得到技術的長足進步,,可以忽略STL,而高手大神都是必會的技能,。
說起STL,,表面上看各種容器算法使用起來感覺確實很簡單,而有些課程講解STL也是僅限于使用,。這讓我們感覺STL就是一個簡單的工具,,需要的時候再臨時查查就行。然而一開始我也是這樣想的,,結果卻并不是這樣的,。STL看起來簡單,但是并不簡單,。如果你真想將STL用好,,必須要完整學習一遍,而不要停留在表層,。
那么學習STL到什么程度才叫好呢,?要形成用STL做開發(fā)的思維方式,了解各種容器的用法,,以及各種工具的內部原理,。不需要你太精通,做到上述要求,你就已經很不錯的,。至于最底層的各種實現(xiàn),,那就復雜了。實際上是基于數(shù)據(jù)結構,、算法和模板的支撐,,研究起來還是需要不少基礎的。
而要想學好STL,,你的需要具備C++基礎,,需要掌握C++模板。否則STL你有看不懂的,。就需要這個基礎,,然后就可以學了。
這里就推薦一本學習STL的新書,,涵蓋了最新的C++14標準的語法,,這本編程新書推薦:C++標準模板庫編程實踐書就是《C++標準模板庫編程實踐》。來看看書籍封面:
下面是書籍的目錄:
目錄:
第1章 STL介紹 1
1.1 基本思想 2
1.2 模板 2
1.3 容器 6
1.4 迭代器 7
1.4.1 獲取迭代器 8
1.4.2 迭代器的類別 8
1.4.3 流迭代器 11
1.4.4 迭代器適配器 12
1.5 迭代器上的運算 14
1.6 智能指針 14
1.6.1 使用unique_ptr<T>指針 16
1.6.2 使用shared_ptr<T>指針 18
1.6.3 weak_ptr<T>指針 21
1.7 算法 22
1.8 將函數(shù)作為實參傳入 23
1.8.1 函數(shù)對象 23
1.8.2 lambda表達式 24
1.9 小結 28
練習 29
第2章 使用序列容器 31
2.1 序列容器 31
2.2 使用array<T,N>容器 35
2.2.1 訪問元素 36
2.2.2 使用數(shù)組容器的迭代器 39
2.2.3 比較數(shù)組容器 41
2.3 使用vector<T>容器 42
2.3.1 創(chuàng)建vector<T>容器 42
2.3.2 vector的容量和大小 44
2.3.3 訪問元素 45
2.3.4 使用vector容器的
迭代器 46
2.3.5 向vector容器中添加
元素 49
2.3.6 刪除元素 53
2.3.7 vector<bool>容器 57
2.4 使用deque<T>容器 58
2.4.1 生成deque容器 58
2.4.2 訪問元素 59
2.4.3 添加和移除元素 59
2.4.4 替換deque容器中的內容 60
2.5 使用list<T>容器 62
2.5.1 生成list容器 63
2.5.2 添加元素 63
2.5.3 移除元素 65
2.5.4 排序和合并元素 66
2.5.5 訪問元素 69
2.6 使用forward_list<T>容器 71
2.7 自定義迭代器 76
2.7.1 STL迭代器的要求 76
2.7.2 走進STL 77
2.8 本章小結 86
練習 87
第3章 容器適配器 89
3.1 什么是容器適配器 89
3.2 創(chuàng)建和使用stack<T>容器
適配器 90
3.3 創(chuàng)建和使用queue<T>容器
適配器 95
3.3.1 queue操作 96
3.3.2 queue容器的實際使用 97
3.4 使用priority_queue<T>容器
適配器 102
3.4.1 創(chuàng)建priority_queue 103
3.4.2 priority_queue操作 104
3.5 堆 107
3.5.1 創(chuàng)建堆 108
3.5.2 堆操作 110
3.6 在容器中保存指針 116
3.6.1 在序列容器中保存指針 116
3.6.2 在優(yōu)先級隊列中存儲
指針 123
3.6.3 指針的堆 125
3.6.4 基類指針的容器 125
3.6.5 對指針序列應用算法 129
3.7 本章小結 130
練習 130
第4章 map容器 131
4.1 map容器介紹 131
4.2 map容器的用法 132
4.2.1 創(chuàng)建map容器 134
4.2.2 map元素的插入 135
4.2.3 在map中構造元素 142
4.2.4 訪問map中的元素 142
4.2.5 刪除元素 152
4.3 pair<>和tuple<>的用法 152
4.3.1 pair的操作 153
4.3.2 tuple的操作 156
4.3.3 tuples和 pairs實戰(zhàn) 158
4.4 multimap容器的用法 163
4.5 改變比較函數(shù) 168
4.5.1 greater<T>對象的用法 168
4.5.2 用自定義的函數(shù)對象來比較
元素 169
4.6 哈希 170
4.7 unordered_map容器的用法 173
4.7.1 生成和管理unordered_map
容器 175
4.7.2 調整格子個數(shù) 177
4.7.3 插入元素 178
4.7.4 訪問元素 179
4.7.5 移除元素 180
4.7.6 訪問格子 180
4.8 unordered_multimap容器的
用法 184
4.9 本章小結 192
練習 193
第5章 set的使用 195
5.1 理解set容器 195
5.2 使用set<T>容器 196
5.2.1 添加和移除元素 197
5.2.2 訪問元素 199
5.2.3 使用set 199
5.2.4 set迭代器 209
5.2.5 在set容器中保存指針 209
5.3 使用multiset<T>容器 215
5.3.1 保存派生類對象的指針 217
5.3.2 定義容器 219
5.3.3 定義示例的main()函數(shù) 220
5.4 unordered_set<T>容器 223
5.4.1 添加元素 224
5.4.2 檢索元素 225
5.4.3 刪除元素 226
5.4.4 創(chuàng)建格子列表 227
5.5 使用unordered_multiset<T>
容器 228
5.6 集合運算 233
5.6.1 set_union()算法 234
5.6.2 set_intersection()算法 235
5.6.3 set_difference()算法 236
5.6.4 set_symmetric_difference()
算法 236
5.6.5 includes()算法 236
5.6.6 集合運算的運用 238
5.7 本章小結 240
練習 240
第6章 排序,、合并,、搜索和分區(qū) 243
6.1 序列排序 243
6.1.1 排序以及相等元素的
順序 246
6.1.2 部分排序 247
6.1.3 測試排序序列 250
6.2 合并序列 251
6.3 搜索序列 260
6.3.1 在序列中查找元素 260
6.3.2 在序列中查找任意范圍的
元素 262
6.3.3 在序列中查找多個元素 264
6.4 分區(qū)序列 268
6.4.1 partition_copy()算法 270
6.4.2 partition_point()算法 271
6.5 二分查找算法 272
6.5.1 binary_search()算法 273
6.5.2 lower_bound()算法 274
6.5.3 equal_range()算法 274
6.6 本章小結 277
練習 278
第7章 更多的算法 279
7.1 檢查元素的屬性 279
7.2 序列的比較 281
7.2.1 查找序列的不同之處 283
7.2.2 按字典序比較序列 286
7.2.3 序列的排列 287
7.3 復制序列 292
7.3.1 復制一定數(shù)目的元素 292
7.3.2 條件復制 292
7.4 復制和反向元素順序 296
7.5 復制一個刪除相鄰重復元素的
序列 297
7.6 從序列中移除相鄰的重復
元素 298
7.7 旋轉序列 299
7.8 移動序列 301
7.9 從序列中移除元素 303
7.10 設置和修改序列中的
元素 305
7.10.1 用函數(shù)生成元素的值 306
7.10.2 轉換序列 307
7.10.3 替換序列中的元素 310
7.11 算法的應用 311
7.12 本章小結 315
練習 320
第8章 生成隨機數(shù) 321
8.1 什么是隨機數(shù) 321
8.2 概率、分布以及熵 322
8.2.1 什么是概率 322
8.2.2 什么是分布 322
8.2.3 什么是熵 324
8.3 用STL生成隨機數(shù) 324
8.3.1 生成隨機數(shù)的種子 325
8.3.2 獲取隨機種子 325
8.3.3 種子序列 326
8.4 分布類 329
8.4.1 默認隨機數(shù)生成器 329
8.4.2 創(chuàng)建分布對象 330
8.4.3 均勻分布 331
8.4.4 正態(tài)分布 342
8.4.5 對數(shù)分布 347
8.4.6 其他和正態(tài)分布相關的
分布 350
8.4.7 抽樣分布 351
8.4.8 其他分布 365
8.5 隨機數(shù)生成引擎和生成器 370
8.5.1 線性同余引擎 371
8.5.2 馬特賽特旋轉演算法
引擎 372
8.5.3 帶進位減法引擎 372
8.6 重組元素序列 373
8.7 本章小結 374
練習 375
第9章 流操作 377
9.1 流迭代器 377
9.1.1 輸入流迭代器 377
9.1.2 輸出流迭代器 381
9.2 重載插入和提取運算符 383
9.3 對文件使用流迭代器 384
9.3.1 文件流 385
9.3.2 文件流類的模板 385
9.3.3 用流迭代器進行文件
輸入 386
9.3.4 用流迭代器來反復讀
文件 388
9.3.5 用流迭代器輸出文件 390
9.4 流迭代器和算法 391
9.5 流緩沖區(qū)迭代器 395
9.5.1 輸入流緩沖區(qū)迭代器 395
9.5.2 輸出流緩沖區(qū)迭代器 396
9.5.3 對文件流使用輸出流緩沖區(qū)
迭代器 397
9.6 string流,、流,,以及流緩沖區(qū)
迭代器 399
9.7 本章小結 402
練習 402
第10章 使用數(shù)值、時間和復數(shù) 403
10.1 數(shù)值計算 403
10.2 數(shù)值算法 403
10.2.1 保存序列中的增量值 404
10.2.2 求序列的和 405
10.2.3 內積 406
10.2.4 相鄰差 411
10.2.5 部分和 411
10.2.6 極大值和極小值 413
10.3 保存和處理數(shù)值 414
10.3.1 valarray對象的基本
操作 415
10.3.2 一元運算符 418
10.3.3 用于valarray對象的復合
賦值運算符 419
10.3.4 valarray對象的二元
運算 420
10.3.5 訪問valarray對象中的
元素 421
10.3.6 多個切片 436
10.3.7 選擇多行或多列 438
10.3.8 使用gslice對象 439
10.3.9 選擇元素的任意子集 440
10.3.10 有條件地選擇元素 441
10.3.11 有理數(shù)算法 442
10.4 時序模板 445
10.4.1 定義duration 446
10.4.2 時鐘和時間點 451
10.5 復數(shù) 458
10.5.1 生成表示復數(shù)的對象 459
10.5.2 復數(shù)的運算 460
10.5.3 復數(shù)上的比較和其他
運算 460
10.5.4 一個使用復數(shù)的簡單
示例 461
10.6 本章小結 463
練習 464
|