Boost程序庫探秘——深度解析C++準標準庫(第2版) ( 簡體 字) |
作者:羅劍鋒 | 類別:1. -> 程式設計 -> C++ -> C++ |
譯者: |
出版社:清華大學出版社 | 3dWoo書號: 37714 詢問書籍請說出此書號!【缺書】 NT售價: 445 元 |
出版日:2/19/2014 |
頁數:640 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787302342731 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言: 第2版前言 閑談移動互聯網和C++ 21世紀的第一個十年是傳統互聯網的十年,而第二個十年,現在看來則極有可能是移動互聯網獨領風騷的十年。隨著2010年Apple iPhone 4“再一次,改變一切”的口號,智能手機、平板電腦、可穿戴設備、智能家電等非傳統計算機終端異軍突起,極大地改變了整個IT界的面貌。 在這場席卷整個世界的移動互聯網風潮中,UNIX操作系統(包括iOS、Android、Linux)出盡風頭,穩定和高效是它們留給開發者和普通用戶最深刻的印象。而在UNIX系統里,C/C++則是默默無聞的最大功臣。 用C/C++編寫的程序,無論在小巧的移動設備上還是機能強勁的服務器上都運行更快、效率更高,所以也更加省電節能——最后一點在如今的“低碳社會”里尤其重要。在軟件界長期關注抽象化和開發效率后,C/C++高效和靈活的特性重新得到了人們的重視。特別是C++,編譯后的代碼運行效率接近C和匯編,同時又擁有許多可提高軟件生產率的高級語 言特性——運行效率與開發效率兼顧,“魚與熊掌可兼得”,無疑是移動互聯網開發者的最佳選擇。 個人淺見,現在C++掌握著兩大法寶:C++11標準和Boost“準標準”。前者是官方標準,步履遲緩但穩健,而后者則是民間標準,內容豐富且極富活力,兩者相輔相成,共同推進C++持續前進。 對第1版的改動 本書的第2版基本保持第1版的整體結構,依據新的C++11標準和Boost程序庫1.54版做全面修訂,調整代碼版式,增添新內容,并修正了原來存在的一些錯誤。 全書各章的重大變化列舉如下。 * 第0章 :增加對C++11重要概念左值和右值的描述; * 第1章 :重新組織了結構,更新為C++11標準,增加了一些新的元編程示例; * 第2章 :numeric conversion和pointer增加新內容; * 第3章 :增加對C++11標準的介紹,新增非常有用的range庫; * 第4章 :增加對C++11標準的介紹; * 第6章 :更新到Boost1.54版,部分實現有變化; * 第8章 :修改了第1版中的不兼容代碼,新增換行過濾器、invert等設備; * 第9章 :修改了第1版中的不兼容代碼,新增序列化的等級和跟蹤; * 第10章 :介紹C++11的enable_if,增加區間概念檢查; * 第11章 :增加has_xxx<>元函數的介紹; * 第12章 :修正了第1版中代碼里隱藏的錯誤; * 附錄 :更新到Boost1.54版。 本書不再使用Windows系統和VC系列編譯器,全面轉用UNIX(Linux和OS X),書中的代碼全部使用最新的GCC編譯通過。 關于C++14 本書第1版成書之時C++11標準剛剛公布,如今僅僅過去兩年的時間,新的C++標準草案(暫名C++14)就已經出臺了。面對其他語言的競爭壓力和計算機行業的迅猛發展,C++標準委員會明顯加快了工作的腳步,有足夠的理由相信下一個正式標準的頒布為期不遠。 從草案來看,與C++98的03小修訂不同, C++14在C++11的基礎上增加了較多的新內容(主要是對標準庫的增強),其中頗具實用價值的有: * 強化auto關鍵字:使用auto讓編譯器自動推導lambda表達式的參數類型和函 數的返回類型,進一步減輕程序員的負擔; * make_unique():類似make_shared()的工廠函數; * dynarray :array和vector的結合體,在棧上分配的動態數組; * optional :來自Boost程序庫,可表示未初始化的對象,但不能持有引用; * shared_mutex :同樣來自Boost程序庫,多線程開發利器讀寫鎖。 這些新特性更加完善了C++語言,使得它越來越貼近追求“省心”、“省力”、“省事”的“現代開發者”(無貶義)。著名的C++編譯器GCC已經在4.8.1版完成了對C++11的完全支持,下一個大版本5.0的目標就是C++14,令人十分期待。 遺憾的是作者在兩年前的預言不幸成真,目前國內C++11標準普及遲緩,IT企業對C++11的接受程度仍然很低,大部分C++開發人員仍然使用十多年前的C++98和老的開發范式在低效率工作,不能發揮出C++的真正實力,也平白地浪費了寶貴的時間和精力。 明年新的C++14標準即將發布,希望到那時我們不會落后太多。 羅劍鋒 2014年1月13日 于 北京 WFC ??
??
??
??
II 第2版前言
III 第2版前言
Boost程序庫探秘——深度解析C++準標準庫(第2版)
Boost程序庫探秘——深度解析C++準標準庫(第2版)
Boost程序庫探秘——深度解析C++準標準庫(第2版)
|
內容簡介:Boost程序庫由C++標準委員會部分成員所設立的Boost社區開發并維護,它功能強大、構造精巧、跨平臺、開源并且完全免費,被稱為“C++‘準’標準庫”,已被廣泛應用在實際軟件開發中。 C++的最新標準(C++11)已經正式公布,而早在這之前,Boost就已經使用庫的形式實現了大部分新功能——而且是完全基于C++98標準實現的,內容涵蓋智能指針、文本處理、并發、模板元編程等許多領域,其范圍之廣內涵之深甚至要超過C++11標準,極大地增強了C++的功能和表現力。 本書基于Boost 1.54版,深入探討了其中的許多重要組件,包括迭代器、函數對象、容器、流處理、序列化以及C++語言中最復雜最具威力的模板元編程,并專辟一章詳細闡述Boost的開發實例,具有較強的實用性,可幫助讀者更好更快地理解掌握Boost的高級用法。 全書內容豐富、組織得當、概念清晰、講解細致,是廣大C++程序員和愛好者的必備好書。 |
目錄:目錄
第0章 導讀 1 0.1 關于本書 1 0.2 讀者對象 2 0.3 本書的風格 3 0.4 左值與右值 3 0.5 本書的開發環境 4 0.6 本書的結構 5 0.7 如何閱讀本書 6 第1章 模板元編程(Ⅰ) 9 1.1 模板元編程概述 9 1.1.1 元數據 10 1.1.2 元函數 11 1.1.3 元函數轉發 13 1.1.4 方便的工具 14 1.1.5 應用示例 15 1.2 type_traits 16 1.2.1 概述 17 1.2.2 元數據類別(Ⅰ) 18 1.2.3 元數據類別(Ⅱ) 20 1.2.4 元數據屬性(Ⅰ) 21 1.2.5 元數據屬性(Ⅱ) 23 1.2.6 元數據屬性(Ⅲ) 24 1.2.7 元數據關系 25 1.2.8 元數據運算(Ⅰ) 26 1.2.9 元數據運算(Ⅱ) 28 1.2.10 解析函數元數據 30 1.2.11 實現原理 31 1.2.12 應用示例 33 1.3 總結 36 第2章 實用工具 39 2.1 compressed_pair 39 2.1.1 什么是空類 39 2.1.2 類摘要 41 2.1.3 構造與賦值 42 2.1.4 用法 43 2.1.5 實現原理 43 2.1.6 功能擴展 45 2.2 checked_delete 49 2.2.1 函數的用法 49 2.2.2 函數對象的用法 50 2.2.3 帶檢查的刪除 52 2.2.4 實現原理 54 2.2.5 使用建議 55 2.3 addressof 56 2.3.1 用法 56 2.3.2 實現原理 58 2.3.3 使用建議 58 2.4 value_initialized 58 2.4.1 變量的初始化 59 2.4.2 initialized 60 2.4.3 用法 61 2.4.4 更方便的用法 61 2.4.5 使用建議 62 2.5 base_from_member 62 2.5.1 類摘要 63 2.5.2 用法 64 2.5.3 進一步的用法 65 2.6 conversion 67 2.6.1 標準轉型操作符 68 2.6.2 多態對象的轉型 69 2.6.3 polymorphic_downcast 70 2.6.4 polymorphic_cast 71 2.6.5 使用模板元編程實現轉型 72 2.7 numeric conversion 74 2.7.1 bounds 75 2.7.2 numeric_cast 78 2.8 pointer 79 2.8.1 get_pointer 79 2.8.2 pointer_cast 80 2.8.3 pointee 81 2.8.4 indirect_reference 82 2.8.5 pointer_to_other 83 2.8.6 compare_pointees 84 2.8.7 pointer_traits 86 2.9 scope_exit 87 2.9.1 用法 88 2.9.2 應用示例 88 2.9.3 實現原理 90 2.10 總結 90 第3章 迭代器 93 3.1 迭代器概述 93 3.1.1 迭代器模式 93 3.1.2 標準迭代器 94 3.1.3 新式迭代器 95 3.1.4 標準迭代器工具 97 3.1.5 迭代器與算法 98 3.2 next_prior 99 3.2.1 函數聲明 99 3.2.2 用法 100 3.2.3 C++11標準 101 3.3 iterator_traits 102 3.3.1 標準迭代器特征類 102 3.3.2 類摘要 103 3.3.3 用法 104 3.4 iterator_facade 104 3.4.1 迭代器的核心操作 105 3.4.2 類摘要 105 3.4.3 用法 107 3.5 iterator_adaptor 111 3.5.1 類摘要 112 3.5.2 用法 113 3.6 迭代器工具 116 3.6.1 共享容器迭代器 116 3.6.2 發生器迭代器 118 3.6.3 逆向迭代器 120 3.6.4 間接迭代器 122 3.6.5 計數迭代器 123 3.6.6 函數輸入迭代器 126 3.6.7 函數輸出迭代器 130 3.6.8 過濾迭代器 132 3.6.9 轉換迭代器 134 3.6.10 索引迭代器 136 3.6.11 組合迭代器 138 3.7 range 141 3.7.1 區間概念 141 3.7.2 區間元函數 142 3.7.3 區間操作函數 143 3.7.4 區間算法 145 3.7.5 區間算法的返回類型 145 3.7.6 iterator_range 148 3.7.7 區間工具 151 3.7.8 區間適配器 154 3.7.9 高級議題 157 3.8 總結 158 第4章 函數對象 161 4.1 hash 161 4.1.1 類摘要 162 4.1.2 用法 163 4.1.3 實現原理 164 4.1.4 擴展hash 165 4.2 mem_fn 167 4.2.1 工作原理 168 4.2.2 用法 168 4.2.3 其他議題 170 4.3 factory 171 4.3.1 類摘要 171 4.3.2 用法 172 4.3.3 value_factory 174 4.3.4 使用auto/decltype 175 4.4 forward 176 4.4.1 類摘要 176 4.4.2 用法 177 4.5 總結 179 第5章 指針容器 181 5.1 概述 181 5.1.1 入門示例 182 5.1.2 指針容器的優缺點 185 5.1.3 可克隆概念 186 5.1.4 克隆分配器 187 5.1.5 指針容器的分類 188 5.2 指針容器的共通能力 191 5.2.1 模板參數 191 5.2.2 構造與賦值 193 5.2.3 訪問元素 194 5.2.4 其他能力 196 5.3 序列指針容器適配器 197 5.3.1 配置元函數 197 5.3.2 類摘要 198 5.3.3 接口解說 200 5.3.4 代碼示例 200 5.4 ptr_vector 201 5.4.1 類摘要 202 5.4.2 用法 203 5.5 ptr_deque 204 5.5.1 類摘要 204 5.5.2 用法 205 5.6 ptr_list 206 5.6.1 類摘要 206 5.6.2 用法 207 5.7 ptr_array 208 5.7.1 類摘要 208 5.7.2 用法 209 5.8 ptr_circular_buffer 211 5.8.1 類摘要 211 5.8.2 用法 212 5.9 空指針處理 213 5.9.1 禁用空指針 213 5.9.2 允許空指針 213 5.9.3 使用空指針 215 5.9.4 空對象模式 216 5.10 關聯指針容器的共通能力 218 5.10.1 類摘要 218 5.10.2 接口解說 219 5.11 集合指針容器適配器 220 5.11.1 配置元函數 220 5.11.2 ptr_set_adapter 221 5.11.3 ptr_multiset_adapter 222 5.12 ptr_set和ptr_multiset 223 5.12.1 類摘要 223 5.12.2 用法 224 5.13 ptr_unordered_set和ptr_ unordered_multiset 225 5.13.1 類摘要 225 5.13.2 用法 227 5.14 映射指針容器適配器 228 5.14.1 配置元函數 228 5.14.2 ptr_map_adapter 229 5.14.3 ptr_multimap_adapter 231 5.15 ptr_map和ptr_multimap 232 5.15.1 類摘要 232 5.15.2 用法 233 5.16 ptr_unordered_map和ptr_ unordered_multimap 234 5.16.1 類摘要 235 5.16.2 用法 236 5.17 使用assign庫 237 5.17.1 向容器添加元素 237 5.17.2 初始化容器元素 238 5.18 使用算法 239 5.18.1 標準算法 239 5.18.2 序列指針容器的算法 243 5.18.3 關聯指針容器的算法 246 5.19 其他議題 248 5.19.1 異常 248 5.19.2 間接函數對象 249 5.19.3 插入迭代器 251 5.19.4 使用視圖分配器 251 5.19.5 可克隆性的再討論 252 5.19.6 序列化 253 5.20 總結 253 第6章 侵入式容器 255 6.1 概述 255 6.1.1 手工實現鏈表 256 6.1.2 intrusive庫介紹 257 6.2 入門示例 258 6.2.1 使用基類掛鉤 258 6.2.2 使用成員掛鉤 259 6.3 基本概念 261 6.3.1 節點 262 6.3.2 節點特征 262 6.3.3 節點算法 263 6.3.4 值特征 264 6.3.5 掛鉤 265 6.3.6 選項 266 6.3.7 處置器 268 6.3.8 克隆 268 6.4 鏈表 269 6.4.1 節點和算法 269 6.4.2 基類掛鉤 270 6.4.3 成員掛鉤 271 6.4.4 list類摘要 272 6.4.5 list的基本用法 274 6.4.6 list的特有用法 276 6.5 有序集合 280 6.5.1 節點和算法 280 6.5.2 基類掛鉤 281 6.5.3 成員掛鉤 282 6.5.4 set類摘要 282 6.5.5 set的基本用法 284 6.5.6 set的特有用法 285 6.5.7 multiset類摘要 288 6.5.8 multiset的用法 288 6.6 無序集合 289 6.6.1 節點和算法 289 6.6.2 基類掛鉤 290 6.6.3 成員掛鉤 290 6.6.4 unordered_set類摘要 291 6.6.5 unordered_set的基本用法 293 6.6.6 unordered_set的特有用法 294 6.6.7 unordered_multiset類摘要 297 6.6.8 unordered_multiset的用法 297 6.7 其他議題 298 6.7.1 同時使用多個掛鉤 298 6.7.2 鏈接模式 300 6.7.3 萬能掛鉤 301 6.8 總結 302 第7章 多索引容器 303 7.1 概述 303 7.2 入門示例 304 7.2.1 簡單的例子 304 7.2.2 復雜的例子 305 7.2.3 更復雜的例子 307 7.3 基本概念 310 7.3.1 索引 310 7.3.2 索引說明 311 7.3.3 鍵提取器 312 7.3.4 索引說明列表 313 7.3.5 索引標簽 313 7.3.6 多索引容器 314 7.4 鍵提取器 315 7.4.1 定義 315 7.4.2 identity 316 7.4.3 member 317 7.4.4 const_mem_fun 318 7.4.5 mem_fun 320 7.4.6 global_fun 321 7.4.7 自定義鍵提取器 321 7.5 序列索引 322 7.5.1 索引說明 322 7.5.2 類摘要 323 7.5.3 用法 324 7.6 隨機訪問索引 326 7.6.1 索引說明 326 7.6.2 類摘要 326 7.6.3 用法 327 7.7 有序索引 328 7.7.1 索引說明 329 7.7.2 類摘要 329 7.7.3 基本用法 331 7.7.4 高級用法 332 7.8 散列索引 335 7.8.1 索引說明 336 7.8.2 類摘要 336 7.8.3 用法 337 7.9 修改元素 339 7.9.1 替換元素 339 7.9.2 修改元素 340 7.9.3 修改鍵 343 7.10 多索引容器 344 7.10.1 類摘要 344 7.10.2 用法 345 7.11 組合索引鍵 348 7.11.1 類摘要 348 7.11.2 用法 349 7.11.3 輔助工具 350 7.12 總結 352 第8章 流處理 353 8.1 概述 353 8.1.1 標準庫的流處理 353 8.1.2 Boost的流處理 355 8.2 入門示例 356 8.2.1 示例1 356 8.2.2 示例2 358 8.3 設備的特征 359 8.3.1 設備的字符類型 359 8.3.2 設備的模式 360 8.3.3 設備的分類 362 8.4 設備 363 8.4.1 設備概述 363 8.4.2 數組設備 364 8.4.3 標準容器設備 366 8.4.4 文件設備 367 8.4.5 空設備 369 8.5 過濾器 370 8.5.1 過濾器概述 370 8.5.2 管道和設備鏈 371 8.5.3 計數過濾器 373 8.5.4 換行過濾器 375 8.5.5 正則表達式過濾器(Ⅰ) 377 8.5.6 正則表達式過濾器(Ⅱ) 379 8.5.7 壓縮過濾器 381 8.6 流 383 8.6.1 基本流 384 8.6.2 過濾流 385 8.7 流處理函數 387 8.8 定制設備 389 8.8.1 定制源設備 390 8.8.2 定制接收設備 392 8.9 定制過濾器 393 8.9.1 過濾器實現原理 393 8.9.2 aggregate_filter 394 8.9.3 basic_line_filter 396 8.9.4 手工打造過濾器 397 8.10 組合設備 401 8.10.1 combine 401 8.10.2 compose 402 8.10.3 invert 403 8.10.4 restrict 405 8.10.5 tee 406 8.11 其他議題 408 8.12 總結 410 第9章 序列化 411 9.1 編譯與使用 411 9.1.1 編譯 411 9.1.2 使用 413 9.2 入門示例 414 9.2.1 示例1 414 9.2.2 示例2 415 9.2.3 示例3 417 9.3 基本概念 418 9.3.1 存檔(archive) 419 9.3.2 可序列化 420 9.3.3 序列化和反序列化 420 9.4 存檔 421 9.4.1 輸出存檔 421 9.4.2 輸入存檔 422 9.4.3 類繼承體系 423 9.4.4 XML格式存檔 424 9.4.5 異常 426 9.5 使用序列化 426 9.5.1 基本類型的序列化 427 9.5.2 數組的序列化 428 9.5.3 標準類型的序列化 430 9.5.4 標準容器的序列化 431 9.5.5 Boost類型的序列化 431 9.5.6 Boost容器的序列化 434 9.6 定制序列化 436 9.6.1 可序列化的要求 436 9.6.2 侵入式可序列化 438 9.6.3 非侵入式可序列化 440 9.6.4 Boost類型的可序列化 441 9.6.5 Boost容器的可序列化 444 9.7 高級定制序列化 446 9.7.1 派生類的序列化 447 9.7.2 序列化的版本 448 9.7.3 序列化的實現等級 449 9.7.4 序列化的跟蹤屬性 451 9.8 指針的序列化 453 9.8.1 指針可序列化的要求 453 9.8.2 原始指針的序列化 454 9.8.3 智能指針的序列化 454 9.8.4 派生類指針的序列化 455 9.8.5 指針容器的序列化 457 9.9 實用工具 457 9.9.1 BOOST_STRONG_ TYPEDEF 458 9.9.2 BOOST_STATIC_ WARNING 458 9.9.3 smart_cast 459 9.9.4 base64編解碼 459 9.9.5 base16編解碼 462 9.10 總結 465 第10章 泛型編程 467 10.1 enable_if 467 10.1.1 類摘要 468 10.1.2 應用于模板函數 469 10.1.3 應用于模板類 470 10.1.4 lazy_enable_if 471 10.1.5 C++11的enable_if 471 10.2 call_traits 472 10.2.1 類摘要 472 10.2.2 用法 472 10.2.3 實現原理 475 10.3 concept_check 476 10.3.1 概述 477 10.3.2 基本概念檢查 477 10.3.3 函數對象概念檢查 478 10.3.4 標準迭代器概念檢查 479 10.3.5 新式迭代器概念檢查 481 10.3.6 容器概念檢查 482 10.3.7 區間概念檢查 484 10.3.8 在函數聲明中的概念檢查 485 10.3.9 概念原型類 486 10.4 function_types 488 10.4.1 屬性標簽 488 10.4.2 函數類型分類 490 10.4.3 函數類型分解 491 10.4.4 函數類型合成 492 10.4.5 其他議題 493 10.5 總結 494 第11章 模板元編程 495 11.1 mpl概述 495 11.2 mpl的整數類型 496 11.2.1 概述 496 11.2.2 整數類型 498 11.2.3 bool類型 499 11.2.4 基本運算 500 11.3 mpl的流程控制 504 11.3.1 if_和if_c 504 11.3.2 eval_if和eval_if_c 505 11.4 mpl的容器 507 11.4.1 概述 507 11.4.2 vector 508 11.4.3 string 509 11.4.4 map 511 11.4.5 相關元函數 512 11.5 mpl的迭代器 513 11.5.1 概述 513 11.5.2 相關元函數 514 11.6 mpl的算法 515 11.6.1 插入器 515 11.6.2 查詢算法 516 11.6.3 變換算法 518 11.6.4 運行時算法 519 11.7 mpl的高級用法 521 11.7.1 高階元數據 521 11.7.2 占位符 522 11.7.3 bind表達式 523 11.7.4 lambda表達式 524 11.7.5 算法的高級應用 525 11.8 mpl的調試 528 11.8.1 斷言 528 11.8.2 打印輸出 531 11.8.3 has_xxx 532 11.9 mpl實例研究 532 11.9.1 泛型編程版本 533 11.9.2 元編程第1版 534 11.9.3 元編程第2版 537 11.10 總結 539 第12章 開發實踐 541 12.1 基本工具 541 12.1.1 標準整數 542 12.1.2 并發 543 12.1.3 日志 546 12.2 第一個TCP服務器 547 12.2.1 tcp_buffer 548 12.2.2 tcp_server 550 12.2.3 tcp_session 554 12.2.4 驗證 559 12.2.5 使用回調函數 560 12.2.6 簡單協議的實現 563 12.2.7 HTTP協議的實現 569 12.3 多線程工具 571 12.3.1 job_queue 571 12.3.2 worker 574 12.3.3 scheduler 578 12.3.4 safe_map 580 12.3.5 safe_singleton 585 12.4 第二個TCP服務器 586 12.4.1 消息結構定義 587 12.4.2 tcp_message 588 12.4.3 tcp_session 591 12.4.4 tcp_server 597 12.4.5 實現echo協議 599 12.4.6 實現聊天室 601 12.5 總結 610 第13章 Effective Boost 613 13.1 基本原則 613 13.2 內存管理 617 13.3 容器、迭代器和算法 618 13.4 其他 620 13.5 結束語 622 附錄A 推薦書目 623 附錄B Boost程序庫組件索引 625 附錄C 程序員的工具箱 637
??
??
??
??
XVI 目錄
XV 目錄
Boost程序庫探秘——深度解析C++準標準庫(第2版)
Boost程序庫探秘——深度解析C++準標準庫(第2版)
Boost程序庫探秘——深度解析C++準標準庫(第2版)
|
序: |