C++標準模板庫編程實戰

《C++標準模板庫編程實戰》是於2017年1月清華大學出版社出版的一本圖書,作者是Ivor Horton

基本介紹

  • 書名:C++標準模板庫編程實戰
  • 作者:Ivor Horton
  • 出版社:清華大學出版社
  • 出版時間:2017年1月
前言,圖書簡介,目錄,

前言

歡迎學習《C++標準模板庫編程實戰》一書。本教程介紹了由C++標準庫組成的頭檔案子集中所包含的一些類和函式的模板。這些模板是功能強大、易於使用的泛型編程工具,並使很多不容易實現的任務變得易於實現。它們生成的代碼通常比我們自己編寫的更加高效和可靠。
通常,筆者不喜歡只解釋它們做了些什麼,而不詳細論述這么做的原因。從前者是很難猜出後者的。因此筆者的目標不僅僅是解釋類和函式模板的功能,還會儘可能地展示如何在實際場景中套用它們。這會導致在某些知識點的介紹中包含相當大的代碼塊,但相信你會覺得它們是值得的。
之前提到的作為本書主題的來自於C++標準庫的頭檔案的集合,被稱作C++標準庫或STL。在本書中,會用STL作為一種方便的縮寫來表示包含本書所討論模板的頭檔案的集合。當然,並沒有STL這種東西——C++語言標準並沒有提到它,因此正規而言,它並不存在。儘管它並沒有被定義,但很多C++程式設計師都大致知道STL是什麼意思。這種叫法由來已久。
貫穿STL的泛型編程思想早在1979年起源於AlexanderStepanov——很久之前並沒有C++語言標準。C++的STL的第一個實現起源於Stepanov和其他在1989年前後工作於惠普公司的職員,而且在那時,STL的實現和C++編譯器所提供的庫是互補的。在20世紀90年代,STL提供的功能開始被考慮納入第一個C++語言標準的提議中,而且STL的精髓使它成為公布於1998年的第一個C++語言標準。從那時起,STL所代表的泛型編程開始被改進和擴展,並且很多不屬於STL的頭檔案中開始出現了模板。本書中的所有材料都和編寫本書時最新通過的語言標準相關,也就是C++14。

圖書簡介

《C++標準模板庫編程實戰》介紹最新的C++14標準的API、庫和擴展,以及如何將它們運用到C++14程式中。在書中,作者IvorHorton則闡述了什麼是STL,以及如何將它們套用到程式中。我們將學習如何使用容器、疊代器,以及如何定義、創建和套用算法。此外,還將學習函式對象和適配器,以及它們的用法。
閱讀完本書之後,你將能夠了解如何擴展STL,如何定義自定義類型的C++組件,你還將能夠定義既滿足C++STL要求又遵從最常見的設計模式和最佳實踐的自定義類型。
標準庫是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.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

相關詞條

熱門詞條

聯絡我們