C++標準模闆庫編程實戰 epub pdf mobi txt 電子書 下載 2024
發表於2024-11-25
C++標準模闆庫編程實戰 epub pdf mobi txt 電子書 下載 2024
Ivor Horton經典作品:
《C++標準模闆庫編程實戰》介紹*新的C++14標準的API、庫和擴展,以及如何將它們運用到C++14程序中。在書中,作者Ivor Horton 則闡述瞭什麼是STL,以及如何將它們應用到程序中。我們將學習如何使用容器、迭代器,以及如何定義、創建和應用算法。此外,還將學習函數對象和適配器,以及它們的用法。
閱讀完本書之後,你將能夠瞭解如何擴展STL,如何定義自定義類型的C++組件,你還將能夠定義既滿足C++ STL要求又遵從*常見的設計模式和*佳實踐的自定義類型。
標準庫是C++標準的一個基本部分,它為C++程序員提供瞭一套全麵而又高效的工具,還提供瞭一些適用於多種類型程序的可重用組件。
主要內容
◆ 如何在C++程序中使用STL
◆ 如何使用容器
◆ 如何使用迭代器
◆ 如何定義、生成和運用算法
◆ 如何使用函數對象
◆ 如何擴展STL,以及如何定義自定義類型的組件
◆ 如何使用適配器
◆ 如何定義自定義類型,使之既滿足C++ STL的要求又遵從通用的設計模式和實踐
Ivor Horton是世界著名計算機圖書作傢,獨立顧問,幫助無數程序員步入編程殿堂。他曾在IBM工作多年,以優異成績擁有數學學士學位。
他的資曆包括:使用大多數語言(如在多種機器上使用匯編語言和高級語言)進行編程,實時編程,設計和實現實時閉環工業控製係統。Horton擁有豐富的麵嚮工程師和科學傢的編程教學經驗(教學內容包括C、C++、Fortran、PL/1、APL等)。同時,他還是機械、加工和電子CAD係統、機械CAM係統和DNC/CNC係統方麵的專傢。
第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指針 16
1.6.2 使用shared_ptr指針 18
1.6.3 weak_ptr指針 21
1.7 算法 22
1.8 將函數作為實參傳入 23
1.8.1 函數對象 23
1.8.2 lambda錶達式 24
1.9 小結 28
練習 29
第2章 使用序列容器 31
2.1 序列容器 31
2.2 使用array容器 35
2.2.1 訪問元素 36
2.2.2 使用數組容器的迭代器 39
2.2.3 比較數組容器 41
2.3 使用vector容器 42
2.3.1 創建vector容器 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容器 57
2.4 使用deque容器 58
2.4.1 生成deque容器 58
2.4.2 訪問元素 59
2.4.3 添加和移除元素 59
2.4.4 替換deque容器中的內容 60
2.5 使用list容器 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容器 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 創建和使用stack容器
適配器 90
3.3 創建和使用queue容器
適配器 95
3.3.1 queue操作 96
3.3.2 queue容器的實際使用 97
3.4 使用priority_queue容器
適配器 102
3.4.1 創建priority_queue 103
3.4.2 priority_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.1 map容器介紹 131
4.2 map容器的用法 132
4.2.1 創建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實戰 158
4.4 multimap容器的用法 163
4.5 改變比較函數 168
4.5.1 greater對象的用法 168
4.5.2 用自定義的函數對象來比較
元素 169
4.6 哈希 170
4.7 unordered_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.8 unordered_multimap容器的
用法 184
4.9 本章小結 192
練習 193
第5章 set的使用 195
5.1 理解set容器 195
5.2 使用set容器 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容器 215
5.3.1 保存派生類對象的指針 217
5.3.2 定義容器 219
5.3.3 定義示例的main()函數 220
5.4 unordered_set容器 223
5.4.1 添加元素 224
5.4.2 檢索元素 225
5.4.3 刪除元素 226
5.4.4 創建格子列錶 227
5.5 使用unordered_multiset
容器 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章 排序、閤並、搜索和分區 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.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 復製一定數目的元素 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.6 string流、流,以及流緩衝區
迭代器 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.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 有理數算法 442
10.4 時序模闆 445
10.4.1 定義duration 446
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
歡迎學習《C++標準模闆庫編程實戰》一書。本教程介紹瞭由C++標準庫組成的頭文件子集中所包含的一些類和函數的模闆。這些模闆是功能強大、易於使用的泛型編程工具,並使很多不容易實現的任務變得易於實現。它們生成的代碼通常比我們自己編寫的更加高效和可靠。
通常,筆者不喜歡隻解釋它們做瞭些什麼,而不詳細論述這麼做的原因。從前者是很難猜齣後者的。因此筆者的目標不僅僅是解釋類和函數模闆的功能,還會盡可能地展示如何在實際場景中應用它們。這會導緻在某些知識點的介紹中包含相當大的代碼塊,但相信你會覺得它們是值得的。
之前提到的作為本書主題的來自於C++標準庫的頭文件的集閤,被稱作C++標準庫或STL。在本書中,會用STL作為一種方便的縮寫來錶示包含本書所討論模闆的頭文件的集閤。當然,並沒有STL這種東西——C++語言標準並沒有提到它,因此正規而言,它並不存在。盡管它並沒有被定義,但很多C++程序員都大緻知道STL是什麼意思。這種叫法由來已久。
貫穿STL的泛型編程思想早在1979年起源於Alexander Stepanov——很久之前並沒有C++語言標準。C++的STL的第一個實現起源於Stepanov和其他在1989年前後工作於惠普公司的職員,而且在那時,STL的實現和C++編譯器所提供的庫是互補的。在20世紀90年代,STL提供的功能開始被考慮納入第一個C++語言標準的提議中,而且STL的精髓使它成為公布於1998年的第一個C++語言標準。從那時起,STL所代錶的泛型編程開始被改進和擴展,並且很多不屬於STL的頭文件中開始齣現瞭模闆。本書中的所有材料都和編寫本書時*新通過的語言標準相關,也就是C++14。
STL不是一個準確的概念,並且本書中並沒有包含C++標準庫的全部模闆。本書隻描述和展示瞭筆者認為C++程序員應該首先選擇理解的標準庫中的模闆,尤其是那些初次接觸C++的開發者。書中將被深度討論的主要標準庫頭文件包括:
用於數據容器:、、、、、、、、、、
用於迭代器:
用於算法:
用於隨機數和統計:
用於數值處理:、
用於時間和定時:、
用於復數:
來自於其他頭文件的模闆,比如、、和也被加入到本書的不同章節中。數據容器的模闆是基礎,在很多程序中都會用到它們。迭代器是使用容器時的基本工具,因此它們也被包含瞭進來。算法是操作保存在容器中的數據的函數模闆,也可以將這些強大的工具應用到數組上,在示例中會對此進行描述和展示。書中有一章將解釋隨機數生成和統計相關的模闆,但是它們中有一些是相當專業的。在模擬、建模和遊戲程序中,很多都得到瞭廣泛應用。本書還討論瞭計算擴展數值數據的模闆,以及和時間、定時相關的模闆。*後,簡短介紹瞭一個關於用於處理復數的類模闆。
使用本書的先決條件
為瞭理解本書的內容,需要具備一些C++語言的基本知識。本書是對《C++入門經典(第4版)》一書的補充,所以如果成功讀完瞭那本書,就可以開始閱讀這本瞭。需要知道的基本知識包括:類和函數模闆是什麼,它們工作的本質是怎樣的。筆者在第1章包含瞭這些基本知識的概述,如果之前不習慣使用模闆,它們的語法會讓人覺得它們比它們本身要復雜得多。一旦開始習慣這些記號,就會發現它們的用法相對容易。STL中也頻繁使用瞭lambda錶達式,所以也必須習慣使用它。
我們需要一個兼容C++14的編譯器。當然,為瞭編寫程序
C++標準模闆庫編程實戰 epub pdf mobi txt 電子書 下載 2024
C++標準模闆庫編程實戰 下載 epub mobi pdf txt 電子書C++標準模闆庫編程實戰 mobi pdf epub txt 電子書 下載 2024
C++標準模闆庫編程實戰 epub pdf mobi txt 電子書 下載學習C++模版庫的參考手冊
評分還不錯,非常經典,希望對c++有更進一步瞭解
評分書還是好書 內容不錯 但是印刷質量不行 有的地方明顯有重影 另外有的函數明顯寫錯瞭 不知道是翻譯就齣錯瞭 還是齣版社打印的失誤 我目前就看瞭40頁 就發現瞭不少類似的問題
評分活動買的,好評,書業買全瞭
評分學好模闆,用好模闆,到處都是模闆
評分非常不錯,感覺難度閤適,剛好銜接作者的VC++2013
評分還可以,接下來要好好學習下
評分做參考書使用,值得深入學習。
評分還可以,接下來要好好學習下
C++標準模闆庫編程實戰 epub pdf mobi txt 電子書 下載 2024