深入實踐c++模板程式設計

china-pub發表於2013-06-13
《深入實踐C++模板程式設計》
基本資訊
作者: 溫宇傑   
出版社:機械工業出版社
ISBN:9787111427544
上架時間:2013-6-13
出版日期:2013 年6月
開本:16開
頁碼:1
版次:1-1
所屬分類:計算機
深入實踐c++模板程式設計
更多關於 》》》《》
內容簡介
    計算機書籍
  c++模板程式設計領域的經典著作,由資深c++開發工程師撰寫。本書以透徹分析原理為前提,深入講解了模板程式設計的基本原理、標準庫中演算法與容器等模板的實現原理;以實踐為導向,透過大量的模板向讀者展示瞭如何使用模板進行程式設計以及如何編寫自定義模板。除此之外,本書還總結了各種常用的模板程式設計技巧、c++11標準中的模板新特性和新語法,以及c++11中新增的其他語言特性。
   《深入實踐c++模板程式設計》共16章,分為四部分:第一部分(第1~4章)首先介紹了模板程式設計的基本概念與用法,然後重點討論了編譯器對模板的具體實現方法及其侷限,讀者可以透過本部分內容理解模板的基本原理並自行實現簡單的類别範本與函式模板。第二部分(第5~9章)對標準庫中的演算法與容器的實現原理和用法進行了深入地剖析,讀者透過本部分內容對標準庫中的演算法、迭代器與容器之間的關係有深入的理解,從而可以精確調節標準容器的行為,自行開發適用於標準演算法的容器類别範本。第三部分(第10~13章)討論了模板程式設計的高階技巧,如模板程式設計中“概念”的設計、控制程式碼量的技術、編譯期邏輯的控制以及超程式設計的基本方法等,讀者可以透過本部分內容開發更具規模、更加智慧的模板庫,並利用超程式設計技術實現編譯期的邏輯演繹與型別推導。第四部分(第14~16章)介紹了c++11標準中的新增語言特性,以及對模板程式設計的影響。
目錄
《深入實踐c++模板程式設計》 
前言 
第一部分 模板基礎 
第1章 hello模板 / 2 
1.1 為什麼需要模板 / 2 
1.2 初識函式模板 / 3 
1.2.1 函式模板的實現 / 3 
1.2.2 如何使用函式模板 / 4 
1.2.3 模板引數自動推導 / 5 
1.2.4 模板引數預設值 / 7 
1.2.5 模板函式的靜態變數 / 8 
1.3 如何處理函式模板中的函式體 / 8 
1.3.1 hpp檔案還是cpp檔案 / 9 
1.3.2 連結器如何識別重複模板例項 / 10 
1.4 尷尬的export template / 13 
1.4.1 什麼是外名模板 / 13 
1.4.2 c++編譯器對外名模板的處理 / 14 
1.5 本章小結 / 15 
第2章 類亦模板 / 16 
2.1 型別無關的資料結構 / 16 
.2.2 實踐——棧類别範本 / 17 
2.2.1 棧類别範本例項 / 17 
2.2.2 棧類别範本衍生子類别範本例項 / 20 
2.3 突破——異質連結串列 / 21 
2.4 構造元組 / 23 
2.4.1 透過巢狀實現元組 / 23 
2.4.2 用類實現元組 / 24 
2.5 類别範本的用法 / 25 
2.5.1 成員函式模板 / 25 
2.5.2 友元函式模板 / 26 
2.6 類别範本的靜態成員 / 27 
2.7 本章小結 / 30 
第3章 模板引數型別詳解 / 31 
3.1 整數模板引數 / 31 
3.2 函式指標模板引數 / 32 
3.3 指標及引用模板引數 / 34 
3.4 成員函式指標模板引數 / 35 
3.5 模板型模板引數 / 37 
3.6 本章小結 / 39 
第4章 凡事總有“特例” / 40 
4.1 從vector[bool]說起 / 40 
4.2 特例的多種寫法 / 44 
4.3 特例匹配規則 / 46 
4.4 函式模板的特例與過載 / 47 
4.4.1 分辨過載 / 50 
4.4.2 編譯期的條件判斷邏輯 / 52 
4.5 本章小結 / 54 
第二部分 標準庫中的模板 
第5章 容器、迭代器與演算法 / 56 
5.1 容器的定義 / 56 
5.2 容器的實現 / 56 
5.2.1 java的實現方法 / 57 
5.2.2 c++的實現方法 / 60 
5.3 容器與迭代器 / 62 
5.3.1 連結串列容器與迭代器 / 64 
5.3.2 集合容器與迭代器 / 67 
5.4 迭代器與演算法 / 71 
5.4.1 求容器中元素之和 / 71 
5.4.2 例項:微型演算法庫 / 73 
5.5 容器與迭代器的分類 / 75 
5.6 容器與演算法的關係 / 76 
5.7 迭代器的陷阱 / 76 
5.8 本章小結 / 77 
第6章 標準庫中的容器 / 79 
6.1 容器的分類及基本要求 / 79 
6.2 序列型容器 / 81 
6.2.1 變長陣列vector / 82 
6.2.2 雙向連結串列list / 84 
6.2.3 雙端序列deque / 85 
6.3 容器轉換器 / 87 
6.3.1 棧stack與佇列queue / 87 
6.3.2 優先佇列priority_queue / 88 
6.4 關聯型容器 / 89 
6.4.1 基本資料結構 / 89 
6.4.2 內嵌型別定義 / 92 
6.4.3 構造關聯型容器 / 92 
6.4.4 插入資料 / 93 
6.4.5 資料的刪除、查詢與訪問 / 96 
6.4.6 整數值專用集合bitset / 98 
6.5 雜湊表容器 / 99 
6.5.1 基本資料結構 / 99 
6.5.2 雜湊函式 / 100 
6.5.3 桶 / 101 
6.6 其他c++11新容器 / 104 
6.6.1 定長陣列array / 104 
6.6.2 單向連結串列forward_list / 105 
6.7 本章小結 / 106 
第7章 隱形的助手——分配器 / 107 
7.1 分配器的基本要求 / 107 
7.2 交換容器內容時的特殊處理 / 110 
7.3 有態分配器與無態分配器 / 112 
7.4 實踐:池分配器 / 114 
7.4.1 池分配器模板類的設計 / 115 
7.4.2 物件池的實現 / 116 
7.4.3 定位構造 / 121 
7.4.4 池分配器的實現 / 122 
7.4.5 測試池分配器 / 127 
7.4.6 實際執行 / 129 
7.5 本章小結 / 131 
第8章 標準庫中的迭代器 / 132 
8.1 迭代器分類 / 132 
8.1.1 輸入迭代器 / 132 
8.1.2 前向迭代器 / 133 
8.1.3 雙向迭代器與跳轉迭代器 / 135 
8.1.4 輸出迭代器 / 136 
8.2 迭代器屬性類别範本 / 137 
8.3 迭代器轉換器 / 139 
8.3.1 反轉迭代器 / 139 
8.3.2 插入迭代器 / 141 
8.4 流迭代器 / 142 
8.5 本章小結 / 144 
第9章 標準庫中的演算法 / 145 
9.1 演算法的共同特徵 / 145 
9.2 標準庫中的常用演算法 / 145 
9.2.1 foreach的三種寫法 / 146 
9.2.2 搜尋 / 147 
9.2.3 計數與比較 / 149 
9.2.4 複製、交換、替換與刪除 / 149 
9.2.5 排序 / 151 
9.2.6 二分搜尋 / 151 
9.2.7 集合運算 / 152 
9.2.8 二叉堆操作 / 154 
9.2.9 其他演算法 / 154 
9.3 預設函式物件 / 155 
9.3.1 函式物件基類 / 155 
9.3.2 運算函式物件 / 156 
9.3.3 引數繫結 / 157 
9.4 實踐:矩陣操作中如何消除迴圈語句 / 165 
9.4.1 跨躍迭代器 / 165 
9.4.2 矩陣類别範本 / 167 
9.4.3 累計迭代器 / 169 
9.4.4 矩陣乘法 / 170 
9.4.5 矩陣lu分解 / 171 
9.4.6 組合迭代器 / 172 
9.4.7 沒有迴圈語句的矩陣乘法 / 177 
9.5 本章小結 / 178 
第三部分 模板程式設計高階技巧 
第10章 專用名詞——概念 / 180 
10.1 模板的先天不足 / 180 
10.2 “概念”的提案及conceptgcc編譯器 / 181 
10.3 概念語法 / 183 
10.3.1 定義概念 / 183 
10.3.2 用概念約束模板引數 / 184 
10.3.3 概念對映 / 184 
10.4 概念模擬庫 / 186 
10.4.1 概念檢查宏 / 187 
10.4.2 自定義概念檢查 / 189 
10.4.3 概念典型 / 190 
10.5 本章小結 / 191 
第11章 程式碼膨脹 / 192 
11.1 原始碼的增加 / 192 
11.1.1 代理類的困境 / 192 
11.1.2 d語言的方法 / 195 
11.2 目的碼的增加 / 196 
11.2.1 目的碼膨脹的成因 / 196 
11.2.2 目的碼膨脹例項 / 197 
11.2.3 改進程式碼 / 198 
11.2.4 測試改進效果 / 206 
11.3 本章小結 / 208 
第12章 常用模板程式設計技巧 / 209 
12.1 標籤與特性 / 209 
12.1.1 特性類别範本numeric_limits / 209 
12.1.2 例項:矩陣與向量乘法 / 211 
12.2 編譯期多型 / 213 
12.2.1 全覆蓋的函式模板 / 213 
12.2.2 虛擬函式的啟發 / 213 
12.2.3 虛基類别範本 / 214 
12.3 策略 / 217 
12.3.1 策略的產生:再說vector的不足 / 217 
12.3.2 為vector新增儲存策略 / 218 
12.4 偽變長引數模板 / 223 
12.4.1 hetero_node的啟發 / 224 
12.4.2 編譯期遞迴 / 225 
12.4.3 訪問元組中的資料 / 227 
12.5 本章小結 / 230 
第13章 超程式設計 / 231 
13.1 c++中的超程式設計 / 231 
13.2 元函式 / 231 
13.2.1 元函式的實現 / 231 
13.2.2 元函式的呼叫 / 233 
13.3 元容器與元演算法 / 235 
13.3.1 元容器的實現 / 235 
13.3.2 例項:容納5種型別的元容器 / 236 
13.4 型別過濾 / 240 
13.4.1 型別過濾元函式的實現 / 240 
13.4.2 例項:應用元容器與元演算法 / 242 
13.5 本章小結 / 244 
第四部分 模板與c++11 
第14章 右值引用 / 246 
14.1 右值引用的產生 / 246 
14.1.1 函式的匿名返回值 / 246 
14.1.2 返回值最佳化 / 249 
14.2 右值引用基本概念 / 251 
14.2.1 左值與非左值 / 251 
14.2.2 右值與右值引用 / 252 
14.2.3 移動構造與移動賦值 / 252 
14.2.4 狹義與廣義的右值 / 253 
14.2.5 左值強制轉義成右值引用 / 254 
14.2.6 右值引用變數是左值 / 255 
14.3 引用宣告符消去規則 / 256 
14.3.1 完美轉發 / 256 
14.3.2 例項:智慧的min函式 / 260 
14.4 移動與異常 / 263 
14.4.1 遷移資料的風險 / 263 
14.4.2 關鍵字noexcept / 265 
14.4.3 轉義函式模板 / 267 
14.4.4 移動的效率問題 / 268 
14.5 本章小結 / 269 
第15章 模板新語法 / 270 
15.1 變長引數模板 / 270 
15.1.1 引數包 / 271 
15.1.2 引數包的內容 / 272 
15.1.3 引數包的展開模式 / 273 
15.1.4 遍歷引數包的內容 / 274 
15.1.5 輕鬆實現元組 / 275 
15.2 擴充套件的型別推導機制 / 276 
15.2.1 自動型別變數 / 277 
15.2.2 提取表示式結果型別 / 278 
15.2.3 函式後置返回型別 / 280 
15.3 其他模板新特性 / 281 
15.3.1 外部模板例項 / 281 
15.3.2 模板別名 / 282 
15.3.3 連續的右尖括號 / 282 
15.4 本章小結 / 283 
第16章 c++11新特性集錦 / 284 
16.1 λ表示式 / 284 
16.1.1 λ表示式語法 / 284 
16.1.2 變數捕獲 / 285 
16.2 初值列表新用法 / 290 
16.2.1 構造變數 / 290 
16.2.2 初值封裝類别範本 / 291 
16.3 標準容器與演算法的變化 / 292 
16.3.1 對應右值引用 / 292 
16.3.2 對應變長引數模板 / 293 
16.3.3 對應初值列表 / 294 
16.4 標準元組類别範本 / 294 
16.5 智慧指標 / 296 
16.5.1 獨佔指標unique_ptr / 297 
16.5.2 共享指標shared_ptr與weak_ptr / 298 
16.6 基於範圍的for迴圈 / 299 
16.7 拾遺 / 300 
16.8 本章小結 / 301
本資訊來源:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16566727/viewspace-763836/,如需轉載,請註明出處,否則將追究法律責任。

相關文章