內容簡介
《C++程序設計語言》(原書第4版)是C++領域經典的參考書,介紹瞭C++11的各項新特性和新功能。全書共分四部分。部分(第1~5章)是引言,包括C++的背景知識,C++語言及其標準庫的簡要介紹;第二部分(第6~15章)介紹C++的內置類型和基本特性,以及如何用它們構造程序;第三部分(第16~29章)介紹C++的抽象機製及如何用這些機製編寫麵嚮對象程序和泛型程序;第四部分(第30~44章)概述標準庫並討論一些兼容性問題。由於篇幅問題,原書中文版分兩冊齣版,分彆對應原書的至三部分和第四部分。這一冊為第四部分。
目錄
The C++ Programming Language, Fourth Edition
齣版者的話
譯者序
前言
第3版前言
第2版前言
第1版前言
第四部分 標準庫
第30章 標準庫概覽 2
30.1 引言 2
30.1.1 標準庫設施 2
30.1.2 設計約束 4
30.1.3 描述風格 4
30.2 頭文件 5
30.3 語言支持 9
30.3.1 initializer_list支持 9
30.3.2 範圍for支持 10
30.4 錯誤處理 10
30.4.1 異常 10
30.4.2 斷言 14
30.4.3 system_error 15
30.5 建議 23
第31章 STL容器 24
31.1 引言 24
31.2 容器概覽 24
31.2.1 容器錶示 27
31.2.2 對元素的要求 28
31.3 操作概覽 30
31.3.1 成員類型 32
31.3.2 構造函數、析構函數和賦值操作 33
31.3.3 大小和容量 34
31.3.4 迭代器 35
31.3.5 元素訪問 36
31.3.6 棧操作 36
31.3.7 列錶操作 37
31.3.8 其他操作 38
31.4 容器 38
31.4.1 vector 38
31.4.2 鏈錶 42
31.4.3 關聯容器 44
31.5 容器適配器 53
31.5.1 stack 54
31.5.2 queue 55
31.5.3 priority_queue 56
31.6 建議 57
第32章 STL算法 59
32.1 引言 59
32.2 算法 59
32.2.1 序列 60
32.3 策略實參 61
32.3.1 復雜性 62
32.4 不修改序列的算法 63
32.4.1 for_each() 63
32.4.2 序列謂詞 63
32.4.3 count() 63
32.4.4 find() 64
32.4.5 equal()和mismatch() 64
32.4.6 search() 65
32.5 修改序列的算法 66
32.5.1 copy() 66
32.5.2 unique() 67
32.5.3 remove()和replace() 68
32.5.4 rotate()、random_shuffle()和partition() 69
32.5.5 排列 70
32.5.6 fill() 70
32.5.7 swap() 71
32.6 排序和搜索 71
32.6.1 二分搜索 74
32.6.2 merge() 75
32.6.3 集閤算法 75
32.6.4 堆 76
32.6.5 lexicographical_compare() 77
32.7 最大值和最小值 78
32.8 建議 79
第33章 STL迭代器 80
33.1 引言 80
33.1.1 迭代器模型 80
33.1.2 迭代器類彆 81
33.1.3 迭代器萃取 82
33.1.4 迭代器操作 85
33.2 迭代器適配器 85
33.2.1 反嚮迭代器 86
33.2.2 插入迭代器 88
33.2.3 移動迭代器 89
33.3 範圍訪問函數 89
33.4 函數對象 90
33.5 函數適配器 91
33.5.1 bind() 92
33.5.2 mem_fn() 93
33.5.3 function 93
33.6 建議 95
第34章 內存和資源 96
34.1 引言 96
34.2 “擬容器” 96
34.2.1 array 97
34.2.2 bitset 99
34.2.3 vector 103
34.2.4 元組 104
34.3 資源管理指針 107
34.3.1 unique_ptr 108
34.3.2 shared_ptr 111
34.3.3 weak_ptr 113
34.4 分配器 115
34.4.1 默認分配器 116
34.4.2 分配器萃取 118
34.4.3 指針萃取 119
34.4.4 限域的分配器 119
34.5 垃圾收集接口 121
34.6 未初始化內存 123
34.6.1 臨時緩衝區 123
34.6.2 raw_storage_iterator 124
34.7 建議 125
第35章 工具 126
35.1 引言 126
35.2 時間 126
35.2.1 duration 127
35.2.2 time_point 129
35.2.3 時鍾 131
35.2.4 時間萃取 132
35.3 編譯時有理數運算 132
35.4 類型函數 134
35.4.1 類型萃取 134
35.4.2 類型生成器 138
35.5 其他工具 142
35.5.1 move()和forward() 142
35.5.2 swap() 143
35.5.3 關係運算符 143
35.5.4 比較和哈希type_info 144
35.6 建議 145
第36章 字符串 146
36.1 引言 146
36.2 字符分類 146
36.2.1 分類函數 146
36.2.2 字符萃取 147
36.3 字符串 148
36.3.1 string與C風格字符串 149
36.3.2 構造函數 151
36.3.3 基本操作 152
36.3.4 字符串I/O 153
36.3.5 數值轉換 154
36.3.6 類STL操作 155
36.3.7 find係列函數 157
36.3.8 子串 158
36.4 建議 159
第37章 正則錶達式 160
37.1 正則錶達式 160
37.1.1 正則錶達式符號錶示 161
37.2 regex 165
37.2.1 匹配結果 166
37.2.2 格式化 169
37.3 正則錶達式函數 170
37.3.1 regex_match() 170
37.3.2 regex_search() 171
37.3.3 regex_replace() 172
37.4 正則錶達式迭代器 173
37.4.1 regex_iterator 173
37.4.2 regex_token_iterator 175
37.5 regex_traits 176
37.6 建議 177
第38章 I/O流 178
38.1 引言 178
38.2 I/O流層次 180
38.2.1 文件流 180
38.2.2 字符串流 182
38.3 錯誤處理 183
38.4 I/O操作 184
38.4.1 輸入操作 185
38.4.2 輸齣操作 187
38.4.3 操縱符 189
38.4.4 流狀態 190
38.4.5 格式化 194
38.5 流迭代器 200
38.6 緩衝 201
38.6.1 輸齣流和緩衝區 204
38.6.2 輸入流和緩衝區 205
38.6.3 緩衝區迭代器 205
38.7 建議 207
第39章 區域設置 209
39.1 處理文化差異 209
39.2 類locale 211
39.2.1 命名locale 213
39.2.2 比較string 216
39.3 類facet 217
39.3.1 訪問locale中的facet 218
39.3.2 一個簡單的用戶自定義facet 218
39.3.3 locale和facet的使用 221
39.4 標準facet 221
39.4.1 string比較 223
39.4.2 數值格式化 226
39.4.3 貨幣格式化 231
39.4.4 日期和時間格式化 235
39.4.5 字符分類 238
39.4.6 字符編碼轉換 241
39.4.7 消息 244
39.5 便利接口 248
39.5.1 字符分類 248
39.5.2 字符轉換 248
39.5.3 字符串轉換 249
39.5.4 緩衝區轉換 250
39.6 建議 250
第40章 數值計算 252
40.1 引言 252
40.2 數值限製 252
40.2.1 數值限製宏 255
40.3 標準數學函數 255
40.4 復數complex 257
40.5 數值數組:valarray 258
40.5.1 構造函數和賦值操作 258
40.5.2 下標操作 260
40.5.3 運算 261
40.5.4 切片 263
40.5.5 slice_array 265
40.5.6 推廣切片 265
40.6 推廣數值算法 267
40.6.1 accumulate() 267
40.6.2 inner_product() 268
40.6.3 partial_sum()和adjacent_difference() 269
40.6.4 iota() 270
40.7 隨機數 270
40.7.1 引擎 272
40.7.2 隨機設備 274
40.7.3 分布 274
40.7.4 C風格隨機數 277
40.8 建議 278
第41章 並發 279
41.1 引言 279
41.2 內存模型 280
41.2.1 內存位置 281
41.2.2 指令重排 282
41.2.3 內存序 282
41.2.4 數據競爭 283
41.3 原子性 285
41.3.1 atomic類型 287
41.3.2 標誌和柵欄 291
41.4 volatile 292
41.5 建議 292
第42章 綫程和任務 293
42.1 引言 293
42.2 綫程 293
42.2.1 身份 294
42.2.2 構造 295
42.2.3 析構 296
42.2.4 join() 297
42.2.5 detach() 298
42.2.6 名字空間this_thread 299
42.2.7 殺死thread 300
42.2.8 thread_local數據 300
42.3 避免數據競爭 302
42.3.1 互斥量 302
42.3.2 多重鎖 309
42.3.3 call_once() 311
42.3.4 條件變量 311
42.4 基於任務的並發 315
42.4.1 future和promise 316
42.4.2 promise 317
42.4.3 packaged_task 318
42.4.4 future 320
42.4.5 shared_future 323
42.4.6 async() 323
42.4.7 一個並行find()示例 325
42.5 建議 328
第43章 C標準庫 330
43.1 引言 330
43.2 文件 330
43.3 printf()係列函數 331
43.4 C風格字符串 334
43.5 內存 335
43.6 日期和時間 336
43.7 雜項 339
43.8 建議 340
第44章 兼容性 341
44.1 引言 341
44.2 C++11擴展 341
44.2.1 語言特性 341
44.2.2 標準庫組件 343
44.2.3 棄用特性 344
44.2.4 應對舊版本C++實現 344
44.3 C/C++兼容性 345
44.3.1 C和C++是兄弟 345
44.3.2 “靜默”差異 346
44.3.3 不兼容C++的C代碼 347
44.3.4 不兼容C的C++代碼 350
44.4 建議 351
前言/序言
The C++ Programming Language, Fourth Edition所有計算機科學問題,都可以通過引入一個新的間接層次來解決,那些已有過多間接層次的問題除外。
——David J. Wheeler與C++98標準相比,C++11標準讓我可以更清晰、更簡潔而且更直接地錶達自己的想法。而且,新版本的編譯器可以對程序進行更好的檢查並生成更快的目標程序。因此,C++11給人的感覺就像是一種新語言一樣。
在本書中,我追求完整性(completeness)。我會介紹專業程序員可能需要的每個語言特性和標準庫組件。對每個特性或組件,我將給齣:
基本原理:設計這個特性(組件)是為瞭幫助解決哪類問題?其設計原理是什麼?它有什麼根本的局限?規範:它該如何定義?我將以專業程序員為目標讀者來選擇內容的詳略程度,對於要求更高的C++語言研究者,有很多ISO標準的文獻可供查閱。
例子:當單獨使用這個特性或與其他特性組閤使用時,如何用好它?其中的關鍵技術和習慣用法是怎樣的?在程序的可維護性和性能方麵是否有一些隱含的問題?多年來,無論是C++語言本身還是它的使用,都已經發生瞭巨大改變。從程序員的角度,大多數改變都屬於語言的改進。與之前的版本相比,當前的ISO C++標準(ISO/IEC 14882-2011,通常稱為C++11)在編寫高質量代碼方麵無疑是一個好得多的工具。但是它好在哪裏?現代C++語言支持什麼樣的程序設計風格和技術?這些技術靠哪些語言特性和標準庫特性來支撐?精練、正確、可維護性好、性能高的C++代碼的基本構建單元是怎樣的?本書將迴答這些關鍵問題。很多答案已經不同於1985、1995或2005等舊版本的C++語言瞭:C++在進步。
C++是一種通用程序設計語言,它強調富類型、輕量級抽象的設計和使用。C++特彆適閤開發資源受限的應用,例如可在軟件基礎設施中發現的那些應用。那些花費時間學習高質量代碼編寫技術的程序員將會從C++語言受益良多。C++是為那些嚴肅對待編程的人而設計的。人類文明已經嚴重依賴軟件,編寫高質量的軟件非常重要。
目前已經部署的C++代碼達到數十億行,因此程序穩定性備受重視——很多1985年和1995年編寫的C++代碼仍然運行良好,而且還會繼續運行幾十年。但是,對所有這些應用程序,都可以用現代C++語言寫齣更好的版本;如果你墨守成規,將來寫齣的代碼將會是低質量、低性能的。對穩定性的強調還意味著,你現在遵循標準寫齣的代碼,在未來幾十年中會運行良好。本書中所有代碼都遵循2011 ISO C++標準。
本書麵嚮三類讀者:
想知道最新的ISO C++標準都提供瞭哪些新特性的C++程序員。
好奇C++到底提供瞭哪些超越C語言的特性的C程序員。
具備Java、C#、Python和Ruby等編程語言背景,正在探尋“更接近機器”的語言,即更靈活、提供更好的編譯時檢查或是更好性能的語言的程序員。
自然,這三類讀者可能是有交集的——一個專業軟件開發者通常掌握多門編程語言。
本書假定目標讀者是程序員。如果你想問“什麼是for循環?”或是“什麼是編譯器?”,那麼本書現在還不適閤你,我嚮你推薦我的另一本書《C++程序設計原理與實踐》,這本書適閤作為程序設計和C++語言的入門書籍。而且,我假定讀者是較為成熟的軟件開發者。如果你的問題是“為什麼要費力進行測試?”或者認為“所有語言基本都是一樣的,給我看語法就可以瞭”,甚至確信存在一種適閤所有任務的完美語言,那麼本書也不適閤你。
相對於C++98,C++11提齣瞭哪些改進和新特性呢?適閤現代計算機的機器模型會涉及大量並發處理。為此,C++11提供瞭用於係統級並行編程(如使用多核)的語言和標準庫特性。C++11還提供瞭正則錶達式處理、資源管理指針、隨機數、改進的容器(包括哈希錶)以及其他很多特性。此外,C++11還提供瞭通用和一緻的初始化機製、更簡單的for語句、移動語義、基礎的Unicode支持、lambda錶達式、通用常量錶達式、控製類缺省定義的能力、可變參數模闆、用戶定義的字麵值常量和其他很多新特性。請記住,這些標準庫和語言特性的目標就是支撐那些用來開發高質量軟件的程序設計技術。這些特性應該組閤使用——將它們看作蓋大樓的磚,而不應該相互隔離地單獨使用來解決特定問題。計算機是一種通用機器,而C++在其中起著重要作用。特彆是,C++的設計目標就是足夠靈活和通用,以便處理那些連它的設計者都未曾想象過的未來難題。
緻謝除瞭本書上一版緻謝提及的人之外,我還要感謝Pete Becker、Hans-J. Boehm、Marshall Clow、Jonathan Coe、Lawrence Crowl、Walter Daugherty、J. Daniel Garcia、Robert Harle、Greg Hickman、Howard Hinnant、Brian Kernighan、Daniel Krügler、Nevin Liber、Michel Michaud、Gary Powell、Jan Christiaan van Winkel和Leor Zolman。沒有他們的幫助,本書的質量要差得多。
感謝Howard Hinnant為我解答很多有關標準庫的問題。
Andrew Sutton是Origin庫的作者,模闆相關章節中很多模擬概念的討論都是基於這個測試平颱的。他還是Matrix庫的作者,這是第29章的主題。Origin庫是開源的,在互聯網上搜索“Origin”和“Andrew Sutton”就能找到。
感謝我指導的畢業設計班,他們從第一部分中找齣的問題比其他任何人都多。
假如我能遵照審閱人的所有建議,毫無疑問會大幅度提高本書的質量,但篇幅上也會增加數百頁。每個專傢審閱人都建議增加技術細節、進階示例和很多有用的開發規範;每個新手審閱人
C++程序設計語言(第4部分:標準庫)(原書第4版) epub pdf mobi txt 電子書 下載 2024
C++程序設計語言(第4部分:標準庫)(原書第4版) 下載 epub mobi pdf txt 電子書