-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

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

( 簡體 字)
作者:[美] Ivor Horton 著 類別:1. -> 程式設計 -> C++ -> C++
譯者:郭小虎、程聰 譯
出版社:清華大學出版社C++標準模板庫編程實戰 3dWoo書號: 45972
詢問書籍請說出此書號!

缺書
NT售價: 350

出版日:1/1/2017
頁數:464
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787302455806
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

歡迎學習《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++編譯器發展得相當好,盡管它是最近才通過的標準,但已經有幾個很不錯的編譯器在很大程度上遵從了C++14。至少可以選擇3個可用的免費編譯器:
● GCC是支持C++、C、Fortan和其他語言的GNU編譯器集合,它支持在本書中用到的所有C++14特性,可以從gcc.gnu.org下載GCC。GCC編譯器集合適用于GNU和Linux,但也可以從www.mingw.org下載Microsoft Windows版。
● ideaone在線編譯器支持C++14,可以通過ideaone.com訪問。在編寫代碼時,對于C++14,它使用的是GCC 5.1。ideaone.com也支持很多其他語言,包括C、Fortran和Java。
● Microsoft Visual Studio 2015 Community Edition在Microsoft Windows操作系統下運行,它支持C++,也支持幾種其他的語言,并配置了一個完整的開發環境。
如何使用本書
對于大部分內容,為了可以順序閱讀,已經對本書的材料進行了組織,所以使用本書的最佳方式是從頭閱讀到尾。一般情況下,在沒解釋功能之前,不會使用它們。一旦解釋了,無論在什么時候,只要有意義,都會把它插到后續的材料中,這也是為什么推薦按順序閱讀章節的原因。很少有需要理解背后的數學知識的主題,并且在這些實例中,也會介紹數學知識。如果不熟悉數學,可以跳過這些,因為這不會限制對后面內容的理解。
沒有人可以只通過看書就學會編程。只有通過寫代碼才能學會如何使用STL。強烈建議自己敲一遍所有的代碼——而不僅僅只是從下載的文件中復制代碼——并編譯和執行你所敲入的代碼。這有時可能變得很乏味,但令人驚訝的是,只需要敲一些程序語句就可以幫助我們理解代碼,尤其是在我們有些琢磨不定時。它也能幫助我們記住東西。如果例子無法運行,請抵制直接回到書中查找原因的誘惑,嘗試從自己的代碼中查找錯誤。
在本書的所有章節中,對于很多部分來說,如果包含了適當的頭文件,代碼段都是可以執行的。如果把它們放到main()函數中,一般都可以執行它們,并得到輸出結果。因此建議為此創建一個程序項目。可以將代碼復制到定義為空的main()中,并為需要的頭文件加上#include指令。為了防止名稱沖突,大多數時候需要刪除之前的代碼。
要讓自己的錯誤成為學習過程的一部分,并且書中的練習為我們提供了這樣的機會。我們犯的錯誤越多,找到和解決的問題就越多,就越能更好地了解使用模板時會犯哪些錯誤。確保自己可以完成所有能完成的練習,并且不去查看答案,除非確信自己不能獨立地解決。許多練習都只涉及所涵蓋章節的直接應用——換句話說,它們只是練習——但有些還需要有點想法,甚至需要一些靈感。
希望每個人都能學會STL。

—Ivor Horton
內容簡介:

《C++標準模板庫編程實戰》介紹最新的C++14標準的API、庫和擴展,以及如何將它們運用到C++14程序中。在書中,作者Ivor Horton 則闡述了什么是STL,以及如何將它們應用到程序中。我們將學習如何使用容器、迭代器,以及如何定義、創建和應用算法。此外,還將學習函數對象和適配器,以及它們的用法。
  閱讀完本書之后,你將能夠了解如何擴展STL,如何定義自定義類型的C++組件,你還將能夠定義既滿足C++ STL要求又遵從最常見的設計模式和最佳實踐的自定義類型。
  標準庫是C++標準的一個基本部分,它為C++程序員提供了一套全面而又高效的工具,還提供了一些適用于多種類型程序的可重用組件。
主要內容
◆ 如何在C++程序中使用STL
◆ 如何使用容器
◆ 如何使用迭代器
◆ 如何定義、生成和運用算法
◆ 如何使用函數對象
◆ 如何擴展STL,以及如何定義自定義類型的組件
◆ 如何使用適配器
◆ 如何定義自定義類型,使之既滿足C++ STL的要求又遵從通用的設計模
式和最佳實踐
目錄:

第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

序: