第1章STL介紹11.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.3weak_ptr<T>指針21
1.7算法22
1.8將函數作為實參傳入23
1.8.1函數對象23
1.8.2lambda表達式24
1.9小結28
練習29
第2章使用序列容器31
2.1序列容器31
2.2使用array<T,N>容器35
2.2.1訪問元素36
2.2.2使用數組容器的迭代器39
2.2.3比較數組容器41
2.3使用vector<T>容器42
2.3.1創建vector<T>容器42
2.3.2vector的容量和大小44
2.3.3訪問元素45
2.3.4使用vector容器的
迭代器46
2.3.5向vector容器中添加
元素49
2.3.6刪除元素53
2.3.7vector<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.1STL迭代器的要求76
2.7.2走進STL77
2.8本章小結86
練習87
第3章容器適配器89
3.1什么是容器適配器89
3.2創建和使用stack<T>容器
適配器90
3.3創建和使用queue<T>容器
適配器95
3.3.1queue操作96
3.3.2queue容器的實際使用97
3.4使用priority_queue<T>容器
適配器102
3.4.1創建priority_queue103
3.4.2priority_queue操作104
3.5堆107
3.5.1創建堆108
3.5.2堆操作110
3.6在容器中保存指針116
3.6.1在序列容器中保存指針116
3.6.2在優先級隊列中存儲
指針123
3.6.3指針的堆125
3.6.4基類指針的容器125
3.6.5對指針序列應用算法129
3.7本章小結130
練習130
第4章map容器131
4.1map容器介紹131
4.2map容器的用法132
4.2.1創建map容器134
4.2.2map元素的插入135
4.2.3在map中構造元素142
4.2.4訪問map中的元素142
4.2.5刪除元素152
4.3pair<>和tuple<>的用法152
4.3.1pair的操作153
4.3.2tuple的操作156
4.3.3tuples和pairs實戰158
4.4multimap容器的用法163
4.5改變比較函數168
4.5.1greater<T>對象的用法168
4.5.2用自定義的函數對象來比較
元素169
4.6哈希170
4.7unordered_map容器的用法173
4.7.1生成和管理unordered_map
容器175
4.7.2調整格子個數177
4.7.3插入元素178
4.7.4訪問元素179
4.7.5移除元素180
4.7.6訪問格子180
4.8unordered_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使用set199
5.2.4set迭代器209
5.2.5在set容器中保存指針209
5.3使用multiset<T>容器215
5.3.1保存派生類對象的指針217
5.3.2定義容器219
5.3.3定義示例的main()函數220
5.4unordered_set<T>容器223
5.4.1添加元素224
5.4.2檢索元素225
5.4.3刪除元素226
5.4.4創建格子列表227
5.5使用unordered_multiset<T>
容器228
5.6集合運算233
5.6.1set_union()算法234
5.6.2set_intersection()算法235
5.6.3set_difference()算法236
5.6.4set_symmetric_difference()
算法236
5.6.5includes()算法236
5.6.6集合運算的運用238
5.7本章小結240
練習240
第6章排序、合并、搜索和分區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分區序列268
6.4.1partition_copy()算法270
6.4.2partition_point()算法271
6.5二分查找算法272
6.5.1binary_search()算法273
6.5.2lower_bound()算法274
6.5.3equal_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復制一定數目的元素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用函數生成元素的值306
7.10.2轉換序列307
7.10.3替換序列中的元素310
7.11算法的應用311
7.12本章小結315
練習320
第8章生成隨機數321
8.1什么是隨機數321
8.2概率、分布以及熵322
8.2.1什么是概率322
8.2.2什么是分布322
8.2.3什么是熵324
8.3用STL生成隨機數324
8.3.1生成隨機數的種子325
8.3.2獲取隨機種子325
8.3.3種子序列326
8.4分布類329
8.4.1默認隨機數生成器329
8.4.2創建分布對象330
8.4.3均勻分布331
8.4.4正態分布342
8.4.5對數分布347
8.4.6其他和正態分布相關的
分布350
8.4.7抽樣分布351
8.4.8其他分布365
8.5隨機數生成引擎和生成器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流緩沖區迭代器395
9.5.1輸入流緩沖區迭代器395
9.5.2輸出流緩沖區迭代器396
9.5.3對文件流使用輸出流緩沖區
迭代器397
9.6string流、流,以及流緩沖區
迭代器399
9.7本章小結402
練習402
第10章使用數值、時間和復數403
10.1數值計算403
10.2數值算法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保存和處理數值414
10.3.1valarray對象的基本
操作415
10.3.2一元運算符418
10.3.3用于valarray對象的復合
賦值運算符419
10.3.4valarray對象的二元
運算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有理數算法442
10.4時序模板445
10.4.1定義duration446
10.4.2時鐘和時間點451
10.5復數458
10.5.1生成表示復數的對象459
10.5.2復數的運算460
10.5.3復數上的比較和其他
運算460
10.5.4一個使用復數的簡單
示例461
10.6本章小結463
練習464