-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
防疫期間 門市僅限取書, 不開放參觀
並提早到6點打烊, 星期日公休
6/17 新書到! 6/8 新書到! 6/1 新書到! 5/25 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

C++標準庫(第2版)

( 簡體 字)
作者:侯捷類別:1. -> 程式設計 -> C++ -> C++
譯者:
出版社:電子工業出版社C++標準庫(第2版) 3dWoo書號: 54207
詢問書籍請說出此書號!

有庫存
NT定價: 1140
折扣價: 1072

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

譯者序:

前言:

第 2 版譯序

“不熟悉 C++ 標準庫,任何人都稱不上是高生產力的 C++ 程序員。”
這是我對每一位學生說的話。
自 C++98(1998)至 C++11(2011),這個語言有了相當的變化。而變化尤其劇烈——或 者你也可以說攻城略地尤其大者——是其日益包山包海的標準庫( standard library )。 如今, 不但昔日閃亮招牌如 STL 容器、 算法、 迭代器等依然熠熠發光,更添加了 Tuple、 Smart Pointer、Type Trait、Clock 和 Timer、 Regular Expression、 Concurrency 等眾多組件。 腳步 一個沒跟上,很可能同儕寫出來的代碼,在你眼中都要逐漸模糊逐漸陌生了。
面對陌生,我們最大的障礙在于心中的怯弱。 To be or not to be, that’s the question! 不要
像哈姆雷特一樣猶豫不決。 面對前程,必須果敢。
愈來愈多的術語,特別是組合式長術語,為翻譯帶來極大困擾。 關于術語翻譯,我的態
度如下:
技術書籍(尤其高級技術書籍)之中譯,價值不在于體現全中文化閱讀。 直接呈現英文
術語很多時候更能營造突出的視覺效果,進而有利閱讀,形成深刻印象。
盡可能兼顧中英詞性平衡。例如“對于矢量和 deque 兩種容器……”就不如“對于 vector
和 deque 兩種容器……”讀來順暢。
本書讀者不可能受制于英文單詞。 我們要學習的是術語代表的技術,而非術語的中文名
稱。
與 C++ 關鍵字重合的術語多半不譯,例如 static、 template、 class 等以及延伸出去的
member template、 function template、 class template 等等。
任何術語第一次出現(或相隔一長段距離后再出現)時多半中英并陳。 但由于你可能采 取跳躍式閱讀,所謂“第一次出現”或“相隔一長段距離后再次出現”也許對你意義不 大。
STL 各數據結構名稱皆不譯,例如 array、 vector、 list、 deque、 hast table、 map、 set、 stack、 queue、 tree ……
STL 六大組件的英文術語原欲全部保留,但由于頻繁出現,對版面的中英比例形成視覺 威脅,因此采用以下譯名: container(容器), algorithm(算法), iterator(迭代器), adapter(適配器), function object(函數對象), allocator(分配器)。這些術語有時中文 呈現,有時英文呈現,有時中英并陳,取決于當時語境。
全書按英文版頁次編排,并因此得以保留原書極其詳盡的索引。 索引詞條皆不譯(因為 書中相應保留了相當份量的英文術語)。



這是個知識爆炸、信息量也爆炸的時代。網絡上如山似海的信息:文章、文件、文檔、文獻 和繁若天星的論壇、 群……很多都是免費的(因而似乎特別有吸引力),但我們的精力和時 間才是更寶貴的東西。 審閱并且評論過許許多多 C++ 標準庫相關讀物后,面對這本結構和 細節都臻上乘的優秀教程,我強烈推薦給你。
侯捷
2014/10/20,White Rock







第 2 版序言

我從未想過本書第 1 版會賣得如此長久。 現在,經過 12 年的等待,出新版本的時候到了
——一個涵蓋最新 C++11 標準的新版本。
注意,其意義比僅僅添加新子庫更多更大。 C++ 已經改變了,其標準庫的幾乎所有典型 應用如今看起來都有那么一點不同。 這不是因為語言出現巨大變化,而是許多小改變造成 的結果,例如運用 rvalue reference 和 move semantic、 range-based for loop、 auto,以及新 的 template 特性。 因此,本書不但展現原標準庫的補充特性及新成員,書中所有例子也都 重新寫過,或至少局部改寫。 盡管如此,為了支持那些仍然使用“舊” C++ 環境的程序員, 本書會在遭遇 C++ 版本差異時加以描述。
我學習C++11有一段艱難的歷程。 大約兩年前我開始看 C++11,但并未追隨標準化的腳 步,因此確實遭遇了理解上的麻煩。 但是標準委員會的人幫助我描述及表現 C++11 新特性, 一如它們如今呈現的樣貌。
最后, 請注意, 本書有個困擾: 雖然份量上由 800 頁成長到超過 1 100 頁, 我還是 無法完整呈現C++ 標準庫。 標準庫中單單針對 C++11 就有大約 750 頁的描述, 都是十 分精練的文字, 沒有太多說明。 基于這個原因, 我必須取舍哪些特性需要描述, 并決 定以怎樣的粒度描述之。 再一次, C++ 社區中的許多人幫助我做出決定。 我的企圖集 中在普通程序員需要的東西。 若干本書舍棄的部分被我做成一份補充篇章放在本書官 網http://www.cppstdlib.com。即便如此,你還是會在 C++ 標準規格書中找到我未曾討論的細節。
教學的藝術,并非體現在“呈現每一面”,而是一種“沙里淘金”的藝術,從中取得最大
價值。 但愿我是成功的。







第 2 版致謝

本書呈現的想法、 觀念、 解決方案和示例,來自許多出處。 過去數年里 C++ 社區引入了許 多關于 C++ 的想法、 概念、 提案和改進,成就了 C++11 的一部分。 因此,我要再一次感謝 所有協助并支持我完成這個新版本的人。
首先我要感謝 C++ 社區和 C++ 標準委員會的每一個人。 不只是為了他們添加新的語言
特性和標準庫特性所做的努力,也為了他們對我做出的解釋,這需要大量耐心和熱誠。
Scott Meyers 和 Anthony Williams 允許我使用他們的教材原稿和書籍原稿,使我得以找出許多有用卻尚未公開出版的程序示例。
我也要感謝每一位審閱本書并給予反饋的人,他們是: Dave Abrahams、 Alberto Ganesh Barbati、 Pete Becker、 Thomas Becker、 Hans Boehm、 Walter E. Brown、 Paolo Carlini、 Lawrence Crowl、 Beman Dawes、 Doug Gregor、 David Grigsby、 Pablo Halpern、 Howard Hinnant、 John Lakos、 Bronek Kozicki、 Dietmar Ku‥hl、 Daniel Kru‥gler、 Mat Marcus、 Jens Maurer、 Alisdair Meredith、 Bartosz Milewski、 P. J. Plauger、 Tobias Schu‥le、 Peter Sommerlad、 Jonathan Wakely 和 Anthony Williams。
有一個人做出了特別杰出的工作。 每當我有疑問, Daniel Kru‥gler 幾乎總是立即回復我, 帶著不可置信的精準和知識。 每一個經歷標準化進程( standardization process )的人都知 道,他就是以此方式對待每一個人的。如果沒有他,不論 C++ standard 或本書都不可能有今 天的質量。
非常感謝我的 Addison-Wesley 編輯團隊: Peter Gordon、 Kim Boedigheimer、 John Fuller 和 Anna Popick。 不只因為他們的支持,也因為他們找出了忍耐和壓力之間的美好平衡。 文 字編輯 Evelyn Pyle 和校對者 Diane Freed 做出了難以置信的工作,將我的德式英文翻譯為美 式英文。 此外,感謝 Frank Mittelbach 解決我的LATEX排版問題。
最后(但不是最不重要),我把所有感謝獻給 Jutta Eckstein。 Jutta 有驚人的能力促使并
支持人們完成他們的理想和目標。 雖然大多數人只在與她共事時才能有此經驗,我卻是如
此榮幸地在每一天的生活中都能得此幸福。







第 1 版序言

一開始,我不過是想寫一本篇幅不大的關于C++ 標準庫的德文書(也就 400 多頁吧)。 萌生 這個想法是在 1993 年。 而在 1999 年的今天,您看到了這個想法的成果:一本英文書,厚 達 800 多頁,其中包含大量的文字描述、 圖片和范例。 我的目標是:詳盡講解C++ 標準庫, 使你在遭遇所有(或幾乎所有)編程問題之前就能夠先獲得解答。 然而請注意,這不是一 種完整描述C++ 標準庫的所有方面的書籍,我通過“在 C++ 中利用標準庫進行學習及編程” 的形式,表現出最重要的主題。
每一個主題都是以一般性概念為基礎開展,然后引入日常編程所必須了解的具體細節。
為了幫助你理解這些概念和細節,書中提供了詳盡的范例程序。
這就是我的前言——言簡意賅! 撰寫此書的過程中,我得到很多樂趣,希望你閱讀本書
時,能夠像我一樣快樂。 請享用!







第 1 版致謝

本書表達的觀點、 概念、 解決方案和范例,來源十分廣泛。 從這個意義上講,封面只列我 一個人的名字未免不公平。 所以我愿在此向過去數年來幫助和支持我的人及公司,表示誠 摯的謝意。
我第一個要感謝的是 Dietmar Ku‥hl。 Dietmar 是一位 C++ 專家,尤其精通 I/O stream(串 流)和國際化(他曾經僅僅為了好玩寫了一個 I/O stream library)。他不僅將本書的大部分從 德文譯為英文,還親自動筆,發揮專長,為本書撰寫了數節內容。 除此之外,過去數年里 他向我提供了很多寶貴的反饋。
其次,我要感謝所有審閱者和那些向我表達過意見的人。 他們的努力使本書的質量獲 得巨大提升。 由于名單太長,以下若有任何疏漏,還請見諒。 英文版的審閱者包括 Chuck Allison、 Greg Comeau、 James A. Crotinger、 Gabriel Dos Reis、 Alan Ezust、 Nathan Myers、 Werner Mossner、 Todd Veldhuizen、 Chichiang Wan、 Judy Ward 和 Thomas Wikehult。 德 文版的審閱者包括 Ralf Boecker、 Dirk Herrmann、 Dietmar Ku‥hl、 Edda Lo‥rke、 Herbert Scheubner、 Dominik Strasser 和 Martin Weitzel。 其他投入者包括 Matt Austern、 Valentin Bonnard、 Greg Colvin、 Beman Dawes、 Bill Gibbons、 Lois Goldthwaite、 Andrew Koenig、 Steve Rumsby、 Bjarne Stroustrup 和 David Vandevoorde。
我要特別感謝 Dave Abrahams、 Janet Cocker、 Catherine Ohala 和 Maureen Willard,他們 對全書進行了非常細致的審閱和編輯。 他們的反饋意見讓本書的質量獲得了難以置信的提 升。
我也要特別感謝我的“活字典” Herb Sutter,他是著名的“Guru of the Week”的創始人,
那是個常態性的 C++ 難題講解專欄,播出于comp.lang.c++.modrated。
我還要感謝一些公司和個人,他們的幫助使我有機會在各個不同的平臺上使用各種不同 的編譯器來測試自己的范例程序。 非常感謝來自 EDG 的 Steve Adamczyk、 Mike Anderson 和 John Spicer,他們的編譯器真是太棒了,在 C++ 標準化過程和本書寫作過程中提供了巨 大的支持。 感謝 P. J. Plauger 和 Dinkumware, Ltd,他們很早以來就持續進行與 C++ standard 兼容的C++ 標準庫實現工作。 感謝 Andreas Hommel 和 Metrowerks,他們完成了極具價值的 CodeWarrior 程序開發環境。 感謝 GNU 和 egcs 編譯器的所有開發者。 感謝 Microsoft,他們 完成了極具價值的 Visual C++。
感謝 Siemens Nixdorf Informations Systems AG 的 Roland Hartinger,他提供了一份他們的 C++
編譯器測試版本。 感謝 Topjects GmbH,為了他那份極具價值的 ObjectSpace library 實現。
感謝 Addison Wesley Longman 公司里與我共同工作過的每一個人。 他們包括 Janet Cocker、 Mike Hendrickson、 Debbie Lafferty、 Marina Lang、 Chanda Leary、 Catherine Ohala、 Marty Rabinowitz、 Susanne Spitzer 和 Maureen Willard 等。 這項工作真是太有趣了。
此外,我還要感謝 BREDEX GmbH 的人們,感謝 C++ 社區的所有人,特別是那些參與
標準化過程的人,感謝他們的支持和耐心(有時候我問的問題確實挺傻)。
最后,也是最重要的,我要將我的感謝(附上一個親吻)送給我的家人: Ulli、 Lucas、 Anica 和 Frederic。 為了這本書,我很長時間沒有好好陪他們了。
Have fun and be human!
內容簡介:

本書是全球 C++ 經典權威參考書籍時隔 12 年,基于 C++11 標準的全新重大升級。標準庫提供了一組公共類和接口,極大地拓展了 C++ 語言核心功能。《C++ 標準庫(第2版)》詳細講解了每一標準庫組件,包括其設計目的和方法、復雜概念的剖析、實用而高效的編程細節、存在的陷阱、重要的類和函數,又輔以大量用 C++11 標準實現的實用代碼范例。除覆蓋全新組件、特性外,本書一如前版,重點著眼于標準模板庫(STL),涉及容器、迭代器、函數對象以及 STL 算法。此外,本書同樣關注 lambda 表達式、基于區間的for循環、move語義及可變參數模板等標準庫中的新式 C++ 編程風格及其影響。
目錄:

第 2 版譯序 xxi
第 2 版序言 xxiii
第 2 版致謝 xxiv
第 1 版序言 xxv
第 1 版致謝 xxvi
1 關于本書 1
1.1 緣起 1
1.2 閱讀前的必要基礎 2
1.3 本書風格與結構 2
1.4 如何閱讀本書 4
1.5 目前發展情勢 5
1.6 范例代碼及額外信息 5
1.7 反饋 5
2 C++ 及標準庫簡介 7
2.1 C++ Standard 的歷史 7
2.1.1 C++11 Standard 常見疑問 8
2.1.2 C++98 和 C++11 的兼容性 9
2.2 復雜度與 Big-O 標記 10
3 語言新特性 13
3.1 C++11 語言新特性 13
3.1.1 微小但重要的語法提升 13
3.1.2 以 auto 完成類型自動推導 14
3.1.3 一致性初始化(Uniform Initialization)與初值列(Initializer List) 15
3.1.4 Range-Based for 循環 17
3.1.5 Move 語義和 Rvalue Reference 19
3.1.6 新式的字符串字面常量(String Literal) 23
3.1.7 關鍵字 noexcept 24
3.1.8 關鍵字 constexpr 26
3.1.9 嶄新的 Template 特性 26
3.1.10 Lambda 28
3.1.11 關鍵字 decltype 32
3.1.12 新的函數聲明語法(New Function Declaration Syntax) 32
3.1.13 帶領域的(Scoped) Enumeration 32
3.1.14 新的基礎類型(New Fundamental Data Type) 33
3.2 雖舊猶新的語言特性 33
3.2.1 基礎類型的明確初始化(Explicit Initialization for Fundamental Type) 37
3.2.2 main()定義式 37
4 一般概念 39
4.1 命名空間(Namespace)std 39
4.2 頭文件(Header File) 40
4.3 差錯和異常(Error and Exception)的處理 41
4.3.1 標準的 Exception Class(異常類) 41
4.3.2 異常類(Exception Class)的成員 44
4.3.3 以 Class exception_ptr 傳遞異常 52
4.3.4 拋出標準異常 53
4.3.5 自標準異常類派生 54
4.4 Callable Object(可被調用的對象) 54
4.5 并發與多線程 55
4.6 分配器(Allocator) 57
5 通用工具 59
5.1 Pair 和 Tuple 60
5.1.1 Pair 60
5.1.2 Tuple(不定數的值組) 68
5.1.3 Tuple 的輸入/輸出 74
5.1.4 tuple 和 pair 轉換 75
5.2 Smart Pointer(智能指針) 76
5.2.1 Class shared_ptr 76
5.2.2 Class weak_ptr 84
5.2.3 誤用 Shared Pointer 89
5.2.4 細究 Shared Pointer 和 Weak Pointer 92
5.2.5 Class unique_ptr 98
5.2.6 細究 Class unique_ptr 110
5.2.7 Class auto_ptr 113
5.2.8 Smart Pointer 結語 114
5.3 數值的極值(Numeric Limit) 115
5.4 Type Trait 和 Type Utility 122
5.4.1 Type Trait 的目的 122
5.4.2 細究 Type Trait 125
5.4.3 Reference Wrapper(外覆器) 132
5.4.4 Function Type Wrapper(外覆器) 133
5.5 輔助函數 134
5.5.1 挑選最小值和最大值 134
5.5.2 兩值互換(Swapping) 136
5.5.3 增補的“比較操作符”(Comparison Operator) 138
5.6 Class ratio<> 的編譯期分數運算 140
5.7 Clock 和 Timer 143
5.7.1 Chrono 程序庫概觀 143
5.7.2 Duration(時間段) 144
5.7.3 Clock(時鐘)和 Timepoint(時間點) 149
5.7.4 C 和 POSIX 提供的 Date/Time 函數 157
5.7.5 以計時器停滯線程(Blocking with Timer) 160
5.8 頭文件 <cstddef>、<cstdlib> 和 <cstring> 161
5.8.1 <cstddef> 內的各項定義 161
5.8.2 <cstdlib> 內的各種定義 162
5.8.3 <cstring> 中的定義式 163
6 標準模板庫 165
6.1 STL 組件(Component) 165
6.2 容器(Container) 167
6.2.1 序列式容器(Sequence Container) 169
6.2.2 關聯式容器(Associative Container) 177
6.2.3 無序容器(Unordered Container) 180
6.2.4 關聯式數組(Associative Array) 185
6.2.5 其他容器 187
6.2.6 容器適配器(Container Adapter) 188
6.3 迭代器(Iterator) 188
6.3.1 關聯式( Associative )及無序 ( Unordered )容器的更多實例 193
6.3.2 迭代器種類(Iterator Category) 198
6.4 算法(Algorithm) 199
6.4.1 區間(Range) 203
6.4.2 處理多重區間(Multiple Ranges) 207
6.5 迭代器之適配器(Iterator Adapter) 210
6.5.1 Insert Iterator(安插型迭代器) 210
6.5.2 Stream Iterator(串流迭代器) 212
6.5.3 Reverse Iterator(反向迭代器) 214
6.5.4 Move Iterator(搬移迭代器) 216
6.6 用戶自定義的泛型函數(User-Defined Generic Function) 216
6.7 更易型算法(Manipulating Algorithm) 217
6.7.1 移除(Removing)元素 218
6.7.2 更易 Associative(關聯式)和 Unordered(無序)容器 221
6.7.3 算法 vs. 成員函數 223
6.8 以函數作為算法的實參 224
6.8.1 以函數作為算法實參的實例示范 224
6.8.2 判斷式(Predicate) 226
6.9 使用 Lambda 229
6.10 函數對象(Function Object) 233
6.10.1 定義一個函數對象 233
6.10.2 預定義的函數對象 239
6.10.3 Binder 241
6.10.4 函數對象 vs. Lambda 243
6.11 容器內的元素 244
6.11.1 容器元素的必要條件 244
6.11.2 Value 語義 vs. Reference 語義 245
6.12 STL 內部的錯誤和異常 245
6.12.1 錯誤處理(Error Handling) 246
6.12.2 異常處理(Exception Handling) 248
6.13 擴展 STL 250
6.13.1 整合更多 Type 250
6.13.2 派生自 STL Type 251
7 STL 容器 253
7.1 容器的共通能力和共通操作 254
7.1.1 容器的共通能力 254
7.1.2 容器的共通操作 254
7.1.3 容器提供的類型 260
7.2 Array 261
7.2.1 Array 的能力 261
7.2.2 Array 的操作 263
7.2.3 把array當成 C-Style Array 267
7.2.4 異常處理( Exception Handling ) 268
7.2.5 Tuple 接口 268
7.2.6 Array 運用實例 268
7.3 Vector 270
7.3.1 Vector 的能力 270
7.3.2 Vector 的操作 273
7.3.3 將 Vector 當作 C-Style Array 使用 278
7.3.4 異常處理( Exception Handling ) 278
7.3.5 Vector 使用實例 279
7.3.6 Class vector<bool> 281
7.4 Deque 283
7.4.1 Deque 的能力 284
7.4.2 Deque 的操作函數 284
7.4.3 Exception Handling 288
7.4.4 Deque 運用實例 288
7.5 List 290
7.5.1 List 的能力 290
7.5.2 List 的操作 291
7.5.3 異常處理( Exception Handling ) 296
7.5.4 List 運用實例 298
7.6 Forward List 300
7.6.1 Forward List 的能力 300
7.6.2 Forward List 的操作 302
7.6.3 異常處理( Exception Handling ) 311
7.6.4 Forward List 運用實例 312
7.7 Set 和 Multiset 314
7.7.1 Set 和 Multiset 的能力 315
7.7.2 Set and Multiset 的操作函數 316
7.7.3 異常處理( Exception Handling ) 325
7.7.4 Set 和 Multiset 運用實例 325
7.7.5 運行期指定排序準則 328
7.8 Map 和 Multimap 331
7.8.1 Map 和 Multimap 的能力 332
7.8.2 Map 和 Multimap 的操作函數 333
7.8.3 將 Map 視為關聯式數組( Associative Array ) 343
7.8.4 異常處理( Exception Handling ) 345
7.8.5 Map 和 Multimap 運用實例 345
7.8.6 綜合實例:運用 Map、 String 并于運行期指定排序準則 351
7.9 無序容器( Unordered Container ) 355
7.9.1 Unordered 容器的能力 357
7.9.2 創建和控制 Unordered 容器 359
7.9.3 Unordered 容器的其他操作 367
7.9.4 Bucket 接口 374
7.9.5 使用 Unordered Map 作為 Associative Array 374
7.9.6 異常處理( Exception Handling ) 375
7.9.7 Unordered 容器的運用實例 375
7.10 其他 STL 容器 385
7.10.1 String 作為一種 STL 容器 385
7.10.2 C-Style Array 作為一種 STL 容器 386
7.11 實現 Reference 語義 388
7.12 各種容器的使用時機 392
8 細探 STL 容器成員 397
8.1 容器內的類型 397
8.2 創建、復制和銷毀( Create, Copy, and Destroy ) 400
8.3 非更易型操作( Nonmodifying Operation ) 403
8.3.1 大小相關操作( Size Operation ) 403
8.3.2 元素比較( Comparison Operation ) 404
8.3.3 Associative 和 Unordered 容器特有的非更易型操作 404
8.4 賦值( Assignment ) 406
8.5 元素直接訪問( Direct Element Access ) 408
8.6 “產出迭代器”之各項操作 410
8.7 安插和移除( Inserting and Removing )元素 411
8.7.1 安插單一元素( Inserting Single Element ) 411
8.7.2 安插多重元素( Inserting Multiple Elements ) 416
8.7.3 移除元素( Removing Element ) 417
8.7.4 重設大小( Resizing ) 420
8.8 List 和 Forward List 的特殊成員函數 420
8.8.1 特殊成員函數(針對 List 和 Forward List ) 420
8.8.2 特殊成員函數(只針對 Forward List ) 423
8.9 容器的策略接口( Policy Interface ) 427
8.9.1 非更易型策略函數( Nonmodifying Policy Function ) 427
8.9.2 更易型策略函數( Modifying Policy Function ) 428
8.9.3 Unordered 容器的 Bucket 相關接口 429
8.10 對分配器( Allocator )的支持 430
8.10.1 基本的分配器成員( Fundamental Allocator Member ) 430
8.10.2 帶有“可選之分配器參數”的構造函數 430
9 STL 迭代器 433
9.1 迭代器頭文件( Header Files for Iterators ) 433
9.2 迭代器種類( Iterator Category ) 433
9.2.1 Output 迭代器 433
9.2.2 Input 迭代器 435
9.2.3 Forward(前向)迭代器 436
9.2.4 Bidirectional(雙向)迭代器 437
9.2.5 Random-Access(隨機訪問)迭代器 438
9.2.6 Vector 迭代器的遞增( Increment )和遞減( Decrement ) 440
9.3 迭代器相關輔助函數 441
9.3.1 advance() 441
9.3.2 next()和prev() 443
9.3.3 distance() 445
9.3.4 iter_swap() 446
9.4 迭代器適配器( Iterator Adapter ) 448
9.4.1 Reverse(反向)迭代器 448
9.4.2 Insert(安插型)迭代器 454
9.4.3 Stream(串流)迭代器 460
9.4.4 Move(搬移)迭代器 466
9.5 Iterator Trait(迭代器特性) 466
9.5.1 為迭代器編寫泛型函數( Generic Function ) 468
9.6 用戶自定義( User-Defined )迭代器 471
10 STL 函數對象及 Lambda 475
10.1 Function Object(函數對象)的概念 475
10.1.1 以 Function Object 為排序準則( Sorting Criterion ) 476
10.1.2 Function Object 擁有內部狀態( Internal State ) 478
10.1.3 for_each()的返回值 482
10.1.4 Predicate(判斷式) vs. Function Object(函數對象) 483
10.2 預定義的 Function Object 和 Binder 486
10.2.1 預定義的 Function Object 486
10.2.2 Function Adapter 和 Binder 487
10.2.3 以 Function Adapter 搭配用戶自定義的 Function Object 495
10.2.4 過時的( Deprecated ) Function Adapter 497
10.3 運用 Lambda 499
10.3.1 Lambda vs. Binder 499
10.3.2 Lambda vs. 帶有狀態的( Stateful ) Function Object 500
10.3.3 Lambda 調用全局函數和成員函數 502
10.3.4 Lambda 作為 Hash 函數、排序準則或相等準則 504
11 STL 算法 505
11.1 算法頭文件(Header File) 505
11.2 算法概觀 505
11.2.1 扼要介紹 506
11.2.2 算法分門別類 506
11.3 輔助函數 517
11.4 for_each() 算法 519
11.5 非更易型算法(Nonmodifying Algorithm) 524
11.5.1 元素計數 524
11.5.2 最小值和最大值 525
11.5.3 查找元素(Searching Element) 528
11.5.4 區間的比較 542
11.5.5 Predicate 用以檢驗區間 550
11.6 更易型算法(Modifying Algorithm) 557
11.6.1 復制元素(Copying Element) 557
11.6.2 搬移元素(Moving Element) 561
11.6.3 轉換和結合元素(Transforming and Combining Element) 563
11.6.4 互換元素(Swapping Elements) 566
11.6.5 賦值(Assigning New Value) 568
11.6.6 替換元素(Replacing Element) 571
11.7 移除型算法(Removing Algorithm) 575
11.7.1 移除某些元素 575
11.7.2 移除重復元素 578
11.8 變序型算法(Mutating Algorithm) 583
11.8.1 反轉元素次序(Reversing the Order of Elements) 583
11.8.2 旋轉元素(Rotating Elements) 584
11.8.3 排列元素(Permuting Elements) 587
11.8.4 對元素重新洗牌(Shuffling Elements) 589
11.8.5 將元素向前搬(Moving Elements to the Front) 592
11.8.6 劃分為兩個子區間(Partition into Two Subranges) 594
11.9 排序算法(Sorting Algorithm) 596
11.9.1 對所有元素排序 596
11.9.2 局部排序(Partial Sorting) 599
11.9.3 根據第 {itshape n} 個元素排序 602
11.9.4 Heap 算法 604
11.10 已序區間算法(Sorted-Range Algorithm) 608
11.10.1 查找元素(Searching Element) 608
11.10.2 合并元素(Merging Elements) 614
11.11 數值算法(Numeric Algorithm) 623
11.11.1 運算后產生結果 623
11.11.2 相對數列和絕對數列之間的轉換 627
12 特殊容器 631
12.1 Stack(堆棧) 632
12.1.1 核心接口 633
12.1.2 Stack 運用實例 633
12.1.3 一個用戶自定義的 Stack Class 635
12.1.4 細究 Class stack<> 637
12.2 Queue(隊列) 638
12.2.1 核心接口 639
12.2.2 Queue 運用實例 640
12.2.3 一個用戶自定義的 Queue Class 641
12.2.4 細究 Class queue<> 641
12.3 Priority Queue(帶優先級的隊列) 641
12.3.1 核心接口 643
12.3.2 Priority Queue 運用實例 643
12.3.3 細究 Class priority_queue<> 644
12.4 細究 Container Adapter 645
12.4.1 類型定義 645
12.4.2 構造函數(Constructor) 646
12.4.3 Priority Queue 額外提供的構造函數 646
12.4.4 各項操作(Operation) 647
12.5 Bitset 650
12.5.1 Bitset 運用實例 651
12.5.2 細究 Class bitset 653
13 字符串 655
13.1 String Class 的目的 656
13.1.1 例一:提煉臨時文件名 656
13.1.2 例二:提煉單詞并反向打印 660
13.2 String Class 細節描述 663
13.2.1 String 的各種相關類型 663
13.2.2 操作函數概覽 666
13.2.3 構造函數和析構函數(Constructor and Destructor) 667
13.2.4 String 和 C-String 668
13.2.5 大小和容量(Size and Capacity) 669
13.2.6 元素訪問(Element Access) 671
13.2.7 比較(Comparison) 672
13.2.8 更改內容(Modifier) 673
13.2.9 子字符串(Substring)及字符串接合(String Concatenation) 676
13.2.10 I/O 操作符 677
13.2.11 搜索和查找(Searching and Finding) 678
13.2.12 npos 的意義 680
13.2.13 數值轉換(Numeric Conversion) 681
13.2.14 String 對迭代器的支持 684
13.2.15 國際化(Internationalization) 689
13.2.16 效率(Performance) 692
13.2.17 String 和 Vector 692
13.3 細究 String Class 693
13.3.1 類型定義和靜態值 693
13.3.2 創建、復制、銷毀(Create, Copy, and Destroy) 694
13.3.3 大小和容量(Size and Capacity) 696
13.3.4 比較(Comparison) 697
13.3.5 字符訪問 699
13.3.6 產生 C-String 和字符數組(Character Array) 700
13.3.7 “改動”之相關操作(Modifying Operation) 700
13.3.8 查找(Searching and Finding) 708
13.3.9 子字符串(Substring)及字符串接合(String Concatenation) 711
13.3.10 I/O函數 712
13.3.11 數值轉換(Numeric Conversion) 713
13.3.12 生成 Iterator 714
13.3.13 對 Allocator 的支持 715
14 正則表達式 717
14.1 Regex 的匹配和查找接口(Match and Search Interface) 717
14.2 處理“次表達式”(Subexpression) 720
14.3 Regex Iterator 726
14.4 Regex Token Iterator 727
14.5 用于替換的正則表達式 730
14.6 Regex Flag 732
14.7 Regex 的異常(Exception) 735
14.8 Regex ECMAScript 文法 738
14.9 其他文法 739
14.10 細究 Basic Regex 簽名式 740
15 以 Stream 完成 I/O 743
15.1 I/O Stream 的共通基礎(Common Background) 744
15.1.1 Stream 對象 744
15.1.2 Stream Class 744
15.1.3 全局的 Stream 對象 745
15.1.4 Stream 操作符 745
15.1.5 操控器(Manipulator) 746
15.1.6 一個簡單例子 746
15.2 基本 Stream Class 和其對象 748
15.2.1 Class 及其層次體系 748
15.2.2 全局性的 Stream 對象 751
15.2.3 頭文件 752
15.3 標準的 Stream 操作符 << 和 >> 753
15.3.1 Output 操作符 << 753
15.3.2 Input 操作符 >> 754
15.3.3 特殊類型的 I/O 755
15.4 Stream 的狀態(State) 758
15.4.1 表示“ Stream 狀態”的常量 758
15.4.2 用來“處理 Stream 狀態”的成員函數 759
15.4.3 Stream 狀態與 Boolean 條件測試 760
15.4.4 Stream 的狀態和異常 762
15.5 標準 I/O 函數 767
15.5.1 Input 相關函數 768
15.5.2 Output 相關函數 771
15.5.3 實例 772
15.5.4 sentry 對象 772
15.6 操控器(Manipulator) 774
15.6.1 操控器概覽 774
15.6.2 操控器如何運作 776
15.6.3 用戶自定義的操控器 777
15.7 格式化(Formatting) 779
15.7.1 Format Flag(格式標志) 779
15.7.2 Boolean 的 I/O 格式 781
15.7.3 欄位寬度、填充字符、位置調整 781
15.7.4 正號與大寫 784
15.7.5 數值基底(Numeric Base) 785
15.7.6 浮點數(Floating-Point)表示法 787
15.7.7 一般格式(General Formatting)定義 789
15.8 國際化(Internationalization) 790
15.9 文件訪問(File Access) 791
15.9.1 File Stream Class 791
15.9.2 File Stream 的 Rvalue 和 Move 語義 795
15.9.3 File Flag(文件標志) 796
15.9.4 隨機訪問(Random Access) 799
15.9.5 使用文件描述器(File Descriptor) 801
15.10 為 String 而設計的 Stream Class 802
15.10.1 String Stream Class 802
15.10.2 String Stream 的 Move 語義 806
15.10.3 char* Stream Class 807
15.11 “用戶自定義類型”之 I/O 操作符 810
15.11.1 實現一個 Output 操作符 810
15.11.2 實現一個 Input 操作符 812
15.11.3 以輔助函數完成 I/O 814
15.11.4 用戶自定義之 Format Flag(格式標志) 815
15.11.5 用戶自定義 I/O 操作符的規約(Convention) 818
15.12 連接 Input 和 Output Stream 819
15.12.1 以 tie() 完成松耦合(Loose Coupling) 819
15.12.2 以 Stream 緩沖區完成緊耦合(Tight Coupling) 820
15.12.3 將標準 Stream 重定向(Redirecting) 822
15.12.4 可讀可寫的 Stream 824
15.13 Stream Buffer Class 826
15.13.1 Stream 緩沖區接口 826
15.13.2 Stream 緩沖區的 Iterator 828
15.13.3 用戶自定義之 Stream 緩沖區 832
15.14 關于效能(Performance) 844
15.14.1 與 C 標準串流同步(Synchronization with C’s Standard Streams) 845
15.14.2 Stream 緩沖區內的緩沖機制 845
15.14.3 直接使用 Stream 緩沖區 846
16 國際化 849
16.1 字符編碼和字符集 850
16.1.1 多字節(Multibyte)和寬字符(Wide-Character)文本 850
16.1.2 不同的字符集 851
16.1.3 在 C++ 中處理字符集 852
16.1.4 Character Trait 853
16.1.5 特殊字符的國際化 857
16.2 Locale(地域)概念 857
16.2.1 使用 Locale 858
16.2.2 Locale Facet 864
16.3 細究 Locale 866
16.4 細究 Facet 869
16.4.1 數值格式化(Numeric Formatting) 870
16.4.2 貨幣符號格式化(Monetary Formatting) 874
16.4.3 時間和日期格式化(Time and Date Formatting) 884
16.4.4 字符的分類和轉換 891
16.4.5 字符串校勘(String Collation) 904
16.4.6 消息國際化(Internationalized Message) 905
17 數值 907
17.1 隨機數及分布(Random Number and Distribution) 907
17.1.1 第一個例子 908
17.1.2 引擎(Engine) 912
17.1.3 細說引擎(Engine) 915
17.1.4 分布(Distribution) 917
17.1.5 細說分布(Distribution) 921
17.2 復數(Complex Number) 925
17.2.1 Class complex<> 一般性質 925
17.2.2 Class complex<> 運用實例 926
17.2.3 復數的各項操作 928
17.2.4 細說 Class complex<> 935
17.3 全局數值函數(Global Numeric Function) 941
17.4 Valarray 943
18 并發 945
18.1 高級接口:async() 和 Future 946
18.1.1 async() 和 Future 的第一個用例 946
18.1.2 實例:等待兩個 Task 955
18.1.3 Shared Future 960
18.2 低層接口:Thread 和 Promise 964
18.2.1 Class std::thread 964
18.2.2 Promise 969
18.2.3 Class packaged_task<> 972
18.3 細說啟動線程(Starting a Thread) 973
18.3.1 細說 async() 974
18.3.2 細說 Future 975
18.3.3 細說 Shared Future 976
18.3.4 細說 Class std::promise 977
18.3.5 細說 Class std::packaged_task 977
18.3.6 細說 Class std::thread 979
18.3.7 Namespace this_thread 981
18.4 線程同步化與 Concurrency(并發)問題 982
18.4.1 當心 Concurrency(并發) 982
18.4.2 Concurrent Data Access 為什么造成問題 983
18.4.3 什么情況下可能出錯 983
18.4.4 解決問題所需要的性質(Feature) 987
18.5 Mutex 和 Lock 989
18.5.1 使用 Mutex 和 Lock 989
18.5.2 細說 Mutex 和 Lock 998
18.5.3 只調用一次 1000
18.6 Condition Variable(條件變量) 1003
18.6.1 Condition Variable(條件變量)的意圖 1003
18.6.2 Condition Variable(條件變量)的第一個完整例子 1004
18.6.3 使用 Condition Variable(條件變量)實現多線程 Queue 1006
18.6.4 細說 Condition Variable(條件變量) 1009
18.7 Atomic 1012
18.7.1 Atomic 用例 1012
18.7.2 細說 Atomic 及其高級接口 1016
18.7.3 Atomic 的 C-Style 接口 1019
18.7.4 Atomic 的低層接口 1019
19 分配器 1023
19.1 以應用程序開發者的角度使用 Allocator 1023
19.2 用戶自定義的 Allocator 1024
19.3 以程序庫開發者的角度使用 Allocator 1026
參考書目 1031
新聞組及論壇( Newsgroup and Forum ) 1031
書籍和網站 1032
索引 1037
序: