關(guān)于我們
書單推薦
新書推薦
|
21天學(xué)通C++ 第8版
《21天學(xué)通C (第8版)》通過大量短小精悍的程序詳細(xì)而全面地闡述了C 基本概念和技術(shù),以及C 11、C 14和C 17新增的功能,包括管理輸入 輸出、循環(huán)和數(shù)組、面向?qū)ο缶幊、模板、使用?biāo)準(zhǔn)模板庫(kù)、列表初始化、lambda表達(dá)式、自動(dòng)類型推斷等。這些內(nèi)容被組織成結(jié)構(gòu)合理、聯(lián)系緊密的章節(jié),每章都可在1小時(shí)內(nèi)閱讀完畢;每章都提供了示例程序清單,并輔以示例輸出和代碼分析,以闡述該章介紹的主題。為加深讀者對(duì)所學(xué)內(nèi)容的理解,每章末尾都提供了常見問題及其答案以及練習(xí)和測(cè)驗(yàn)。讀者可對(duì)照附錄E提供的測(cè)驗(yàn)和練習(xí)答案,了解自己對(duì)所學(xué)內(nèi)容的掌握程度。
《21天學(xué)通C (第8版)》是針對(duì)C 初學(xué)者編寫的,不要求讀者有C語(yǔ)言方面的背景知識(shí),可作為高等院校教授C 課程的教材,也可供初學(xué)者自學(xué)C 時(shí)使用。
通過閱讀本書,讀者可快速掌握C 的基本知識(shí)并學(xué)習(xí)其中更高級(jí)的功能和概念。本書根據(jù)C 14標(biāo)準(zhǔn)進(jìn)行了全面修訂,展望了C 17,并從實(shí)用的角度詮釋C 語(yǔ)言,幫助讀者學(xué)習(xí)如何使用它創(chuàng)建速度更快、更簡(jiǎn)潔、更高效的C 應(yīng)用程序。
掌握C 和面向?qū)ο缶幊痰幕局R(shí)。
理解如何使用lambda表達(dá)式、移動(dòng)構(gòu)造函數(shù)和賦值運(yùn)算符等C 功能編寫簡(jiǎn)潔、高效的代碼。
學(xué)習(xí)C 編程的實(shí)踐并避開常見的陷阱。
學(xué)習(xí)標(biāo)準(zhǔn)模板庫(kù),包括大多數(shù)真實(shí)C 應(yīng)用程序都要用到的容器和算法。
使用每章末尾的練習(xí)來(lái)檢驗(yàn)對(duì)知識(shí)的掌握程度。
本書特色:
無(wú)需任何編程經(jīng)驗(yàn);
編寫速度更快、功能更強(qiáng)大的C 程序,編譯源代碼并創(chuàng)建可執(zhí)行文件;
學(xué)習(xí)封裝、抽象、繼承和多態(tài)等面向?qū)ο缶幊谈拍睿?使用標(biāo)準(zhǔn)模板庫(kù)中的算法和容器編寫功能豐富而穩(wěn)定的C 應(yīng)用程序;
學(xué)習(xí)自動(dòng)類型推斷是如何幫助簡(jiǎn)化C 代碼的;
使用lambda表達(dá)式、智能指針和移動(dòng)構(gòu)造函數(shù)完成復(fù)雜的編程工作;
通過向編程專家學(xué)習(xí),掌握C 功能;
學(xué)習(xí)能夠用來(lái)編寫出簡(jiǎn)潔且高性能應(yīng)用程序的C 功能;
展望C 17有望引入的新功能。
讀者可通過www.epubit.com.cn book details 4780下載本書源代碼。
Siddhartha Rao是全球領(lǐng)先的企業(yè)軟件提供商SAP SE負(fù)責(zé)安全響應(yīng)的副總裁。C 的發(fā)展讓他深信,您能編寫速度更快、更簡(jiǎn)潔、更強(qiáng)大的C 應(yīng)用程序。Siddhartha酷愛旅游,還是山地自行車運(yùn)動(dòng)的狂熱愛好者;他期待著您對(duì)本書的反饋。
第1章 緒論1
1.1 C 簡(jiǎn)史1 1.1.1 與C語(yǔ)言的關(guān)系1 1.1.2 C 的優(yōu)點(diǎn)1 1.1.3 C 標(biāo)準(zhǔn)的發(fā)展歷程2 1.1.4 哪些人使用C 程序2 1.2 編寫C 應(yīng)用程序2 1.2.1 生成可執(zhí)行文件的步驟2 1.2.2 分析并修復(fù)錯(cuò)誤2 1.2.3 集成開發(fā)環(huán)境3 1.2.4 編寫第一個(gè)C 應(yīng)用程序3 1.2.5 生成并執(zhí)行第一個(gè)C 應(yīng)用程序4 1.2.6 理解編譯錯(cuò)誤5 1.3 C 新增的功能5 1.4 總結(jié)5 1.5 問與答6 1.6 作業(yè)6 1.6.1 測(cè)驗(yàn)6 1.6.2 練習(xí)6 第2章 C 程序的組成部分8 2.1 Hello World程序的組成部分8 2.1.1 預(yù)處理器編譯指令#include9 2.1.2 程序的主體main( )9 2.1.3 返回值10 2.2 名稱空間的概念10 2.3 C 代碼中的注釋11 2.4 C 函數(shù)12 2.5 使用std::cin和std::cout執(zhí)行基本輸入 輸出操作14 2.6 總結(jié)15 2.7 問與答15 2.8 作業(yè)15 2.8.1 測(cè)驗(yàn)16 2.8.2 練習(xí)16 第3章 使用變量和常量17 3.1 什么是變量17 3.1.1 內(nèi)存和尋址概述17 3.1.2 聲明變量以訪問和使用內(nèi)存17 3.1.3 聲明并初始化多個(gè)類型相同的 變量19 3.1.4 理解變量的作用域19 3.1.5 全局變量20 3.1.6 命名約定22 3.2 編譯器支持的常見C 變量類型22 3.2.1 使用bool變量存儲(chǔ)布爾值23 3.2.2 使用char變量存儲(chǔ)字符23 3.2.3 有符號(hào)整數(shù)和無(wú)符號(hào)整數(shù)的 概念24 3.2.4 有符號(hào)整型short、int、long和 long long24 3.2.5 無(wú)符號(hào)整型unsigned short、unsigned int、unsigned long和unsigned long long25 3.2.6 選擇正確的數(shù)據(jù)類型以免發(fā)生 溢出錯(cuò)誤25 3.2.7 浮點(diǎn)類型float和double26 3.3 使用sizeof確定變量的長(zhǎng)度26 3.4 使用auto自動(dòng)推斷類型28 3.5 使用typedef替換變量類型29 3.6 什么是常量30 3.6.1 字面常量30 3.6.2 使用const將變量聲明為常量30 3.6.3 使用constexpr定義常量表達(dá)式31 3.6.4 枚舉32 3.6.5 使用#define定義常量34 3.7 不能用作常量或變量名的關(guān)鍵字34 3.8 總結(jié)35 3.9 問與答36 3.10 作業(yè)37 3.10.1 測(cè)驗(yàn)37 3.10.2 練習(xí)37 第4章 管理數(shù)組和字符串38 4.1 什么是數(shù)組38 4.1.1 為何需要數(shù)組38 4.1.2 聲明和初始化靜態(tài)數(shù)組39 4.1.3 數(shù)組中的數(shù)據(jù)是如何存儲(chǔ)的39 4.1.4 訪問存儲(chǔ)在數(shù)組中的數(shù)據(jù)40 4.1.5 修改存儲(chǔ)在數(shù)組中的數(shù)據(jù)41 4.2 多維數(shù)組43 4.2.1 聲明和初始化多維數(shù)組44 4.2.2 訪問多維數(shù)組中的元素44 4.3 動(dòng)態(tài)數(shù)組45 4.4 C風(fēng)格字符串46 4.5 C 字符串:使用std::string48 4.6 總結(jié)50 4.7 問與答50 4.8 作業(yè)50 4.8.1 測(cè)驗(yàn)51 4.8.2 練習(xí)51 第5章 使用表達(dá)式、語(yǔ)句和運(yùn)算符52 5.1 語(yǔ)句52 5.2 復(fù)合語(yǔ)句(語(yǔ)句塊)53 5.3 使用運(yùn)算符53 5.3.1 賦值運(yùn)算符(=)53 5.3.2 理解左值和右值53 5.3.3 加法運(yùn)算符( )、減法運(yùn)算符( )、乘法運(yùn)算符(*)、除法運(yùn)算符( )和求模運(yùn)算符(%)53 5.3.4 遞增運(yùn)算符( )和遞減運(yùn)算符 ( )54 5.3.5 前綴還是后綴55 5.3.6 相等運(yùn)算符(==)和不等運(yùn)算符 (!=)56 5.3.7 關(guān)系運(yùn)算符56 5.3.8 邏輯運(yùn)算NOT、AND、OR和 XOR58 5.3.9 使用C 邏輯運(yùn)算NOT(!)、AND(&&)和OR(||)59 5.3.10 按位運(yùn)算符NOT(~)、AND(&)、OR(|)和XOR(^)63 5.3.11 按位右移運(yùn)算符(>>)和左移 運(yùn)算符(<<)64 5.3.12 復(fù)合賦值運(yùn)算符65 5.3.13 使用運(yùn)算符sizeof確定變量占用 的內(nèi)存量67 5.3.14 運(yùn)算符優(yōu)先級(jí)68 5.4 總結(jié)69 5.5 問與答69 5.6 作業(yè)70 5.6.1 測(cè)驗(yàn)70 5.6.2 練習(xí)70 第6章 控制程序流程71 6.1 使用if…else有條件地執(zhí)行71 6.1.1 使用if…else進(jìn)行條件編程72 6.1.2 有條件地執(zhí)行多條語(yǔ)句73 6.1.3 嵌套if語(yǔ)句74 6.1.4 使用switch-case進(jìn)行條件處理77 6.1.5 使用運(yùn)算符 :進(jìn)行條件處理80 6.2 在循環(huán)中執(zhí)行代碼81 6.2.1 不成熟的goto循環(huán)81 6.2.2 while循環(huán)83 6.2.3 do…while循環(huán)84 6.2.4 for循環(huán)86 6.2.5 基于范圍的for循環(huán)88 6.3 使用continue和break修改循環(huán)的 行為90 6.3.1 不結(jié)束的循環(huán)無(wú)限循環(huán)90 6.3.2 控制無(wú)限循環(huán)91 6.4 編寫嵌套循環(huán)93 6.4.1 使用嵌套循環(huán)遍歷多維數(shù)組94 6.4.2 使用嵌套循環(huán)計(jì)算斐波納契 數(shù)列95 6.5 總結(jié)96 6.6 問與答96 6.7 作業(yè)97 6.7.1 測(cè)驗(yàn)97 6.7.2 練習(xí)97 第7章 使用函數(shù)組織代碼99 7.1 為何需要函數(shù)99 7.1.1 函數(shù)原型是什么100 7.1.2 函數(shù)定義是什么101 7.1.3 函數(shù)調(diào)用和實(shí)參是什么101 7.1.4 編寫接受多個(gè)參數(shù)的函數(shù)101 7.1.5 編寫沒有參數(shù)和返回值的函數(shù)103 7.1.6 帶默認(rèn)值的函數(shù)參數(shù)103 7.1.7 遞歸函數(shù)調(diào)用自己的函數(shù)105 7.1.8 包含多條return語(yǔ)句的函數(shù)106 7.2 使用函數(shù)處理不同類型的數(shù)據(jù)107 7.2.1 函數(shù)重載107 7.2.2 將數(shù)組傳遞給函數(shù)109 7.2.3 按引用傳遞參數(shù)110 7.3 微處理器如何處理函數(shù)調(diào)用111 7.3.1 內(nèi)聯(lián)函數(shù)112 7.3.2 自動(dòng)推斷返回類型113 7.3.3 lambda函數(shù)114 7.4 總結(jié)115 7.5 問與答116 7.6 作業(yè)116 7.6.1 測(cè)驗(yàn)116 7.6.2 練習(xí)116 第8章 闡述指針和引用118 8.1 什么是指針118 8.1.1 聲明指針119 8.1.2 使用引用運(yùn)算符(&)獲取變量的 地址119 8.1.3 使用指針存儲(chǔ)地址120 8.1.4 使用解除引用運(yùn)算符(*)訪問 指向的數(shù)據(jù)122 8.1.5 將sizeof( )用于指針的結(jié)果124 8.2 動(dòng)態(tài)內(nèi)存分配125 8.2.1 使用new和delete動(dòng)態(tài)地分配和 釋放內(nèi)存125 8.2.2 將遞增和遞減運(yùn)算符( 和 ) 用于指針的結(jié)果127 8.2.3 將關(guān)鍵字const用于指針129 8.2.4 將指針傳遞給函數(shù)130 8.2.5 數(shù)組和指針的類似之處131 8.3 使用指針時(shí)常犯的編程錯(cuò)誤133 8.3.1 內(nèi)存泄露133 8.3.2 指針指向無(wú)效的內(nèi)存單元133 8.3.3 懸浮指針(也叫迷途或失控 指針)134 8.3.4 檢查使用new發(fā)出的分配請(qǐng)求是否得到滿足135 8.4 指針編程最佳實(shí)踐137 8.5 引用是什么137 8.5.1 是什么讓引用很有用138 8.5.2 將關(guān)鍵字const用于引用139 8.5.3 按引用向函數(shù)傳遞參數(shù)140 8.6 總結(jié)140 8.7 問與答141 8.8 作業(yè)142 8.8.1 測(cè)驗(yàn)142 8.8.2 練習(xí)142 第9章 類和對(duì)象144 9.1 類和對(duì)象144 9.1.1 聲明類145 9.1.2 作為類實(shí)例的對(duì)象145 9.1.3 使用句點(diǎn)運(yùn)算符訪問成員146 9.1.4 使用指針運(yùn)算符(->)訪問成員146 9.2 關(guān)鍵字public和private147 9.3 構(gòu)造函數(shù)150 9.3.1 聲明和實(shí)現(xiàn)構(gòu)造函數(shù)150 9.3.2 何時(shí)及如何使用構(gòu)造函數(shù)151 9.3.3 重載構(gòu)造函數(shù)152 9.3.4 沒有默認(rèn)構(gòu)造函數(shù)的類154 9.3.5 帶默認(rèn)值的構(gòu)造函數(shù)參數(shù)155 9.3.6 包含初始化列表的構(gòu)造函數(shù)156 9.4 析構(gòu)函數(shù)157 9.4.1 聲明和實(shí)現(xiàn)析構(gòu)函數(shù)157 9.4.2 何時(shí)及如何使用析構(gòu)函數(shù)158 9.5 復(fù)制構(gòu)造函數(shù)160 9.5.1 淺復(fù)制及其存在的問題160 9.5.2 使用復(fù)制構(gòu)造函數(shù)確保深復(fù)制162 9.5.3 有助于改善性能的移動(dòng)構(gòu)造 函數(shù)166 9.6 構(gòu)造函數(shù)和析構(gòu)函數(shù)的其他用途166 9.6.1 不允許復(fù)制的類167 9.6.2 只能有一個(gè)實(shí)例的單例類167 9.6.3 禁止在棧中實(shí)例化的類169 9.6.4 使用構(gòu)造函數(shù)進(jìn)行類型轉(zhuǎn)換171 9.7 this指針172 9.8 將sizeof( )用于類173 9.9 結(jié)構(gòu)不同于類的地方175 9.10 聲明友元176 9.11 共用體:一種特殊的數(shù)據(jù)存儲(chǔ) 機(jī)制178 9.11.1 聲明共用體178 9.11.2 在什么情況下使用共用體178 9.12 對(duì)類和結(jié)構(gòu)使用聚合初始化180 9.13 總結(jié)183 9.14 問與答183 9.15 作業(yè)184 9.15.1 測(cè)驗(yàn)184 9.15.2 練習(xí)184 第10章 實(shí)現(xiàn)繼承185 10.1 繼承基礎(chǔ)185 10.1.1 繼承和派生186 10.1.2 C 派生語(yǔ)法186 10.1.3 訪問限定符protected188 10.1.4 基類初始化向基類傳遞 參數(shù)190 10.1.5 在派生類中覆蓋基類的方法192 10.1.6 調(diào)用基類中被覆蓋的方法194 10.1.7 在派生類中調(diào)用基類的方法194 10.1.8 在派生類中隱藏基類的方法196 10.1.9 構(gòu)造順序198 10.1.10 析構(gòu)順序198 10.2 私有繼承200 10.3 保護(hù)繼承202 10.4 切除問題205 10.5 多繼承205 10.6 使用final禁止繼承207 10.7 總結(jié)208 10.8 問與答208 10.9 作業(yè)208 10.9.1 測(cè)驗(yàn)208 10.9.2 練習(xí)209 第11章 多態(tài)210 11.1 多態(tài)基礎(chǔ)210 11.1.1 為何需要多態(tài)行為210 11.1.2 使用虛函數(shù)實(shí)現(xiàn)多態(tài)行為212 11.1.3 為何需要虛構(gòu)造函數(shù)213 11.1.4 虛函數(shù)的工作原理理解 虛函數(shù)表217 11.1.5 抽象基類和純虛函數(shù)220 11.2 使用虛繼承解決菱形問題222 11.3 表明覆蓋意圖的限定符override225 11.4 使用final來(lái)禁止覆蓋函數(shù)226 11.5 可將復(fù)制構(gòu)造函數(shù)聲明為虛函數(shù)嗎227 11.6 總結(jié)230 11.7 問與答230 11.8 作業(yè)231 11.8.1 測(cè)驗(yàn)231 11.8.2 練習(xí)231 第12章 運(yùn)算符類型與運(yùn)算符重載232 12.1 C 運(yùn)算符232 12.2 單目運(yùn)算符233 12.2.1 單目運(yùn)算符的類型233 12.2.2 單目遞增與單目遞減運(yùn)算符234 12.2.3 轉(zhuǎn)換運(yùn)算符236 12.2.4 解除引用運(yùn)算符(*)和成員選擇 運(yùn)算符(->)238 12.3 雙目運(yùn)算符239 12.3.1 雙目運(yùn)算符的類型240 12.3.2 雙目加法與雙目減法運(yùn)算符240 12.3.3 實(shí)現(xiàn)運(yùn)算符 =與 =242 12.3.4 重載等于運(yùn)算符(==)和不等運(yùn)算 符(!=)243 12.3.5 重載運(yùn)算符<、>、<=和>=245 12.3.6 重載復(fù)制賦值運(yùn)算符(=)248 12.3.7 下標(biāo)運(yùn)算符250 12.4 函數(shù)運(yùn)算符operator()253 12.5 用于高性能編程的移動(dòng)構(gòu)造函數(shù)和 移動(dòng)賦值運(yùn)算符254 12.5.1 不必要的復(fù)制帶來(lái)的問題254 12.5.2 聲明移動(dòng)構(gòu)造函數(shù)和移動(dòng)賦值 運(yùn)算符254 12.6 用戶定義的字面量258 12.7 不能重載的運(yùn)算符260 12.8 總結(jié)261 12.9 問與答261 12.10 作業(yè)261 12.10.1 測(cè)驗(yàn)261 12.10.2 練習(xí)261 第13章 類型轉(zhuǎn)換運(yùn)算符262 13.1 為何需要類型轉(zhuǎn)換262 13.2 為何有些C 程序員不喜歡C風(fēng)格 類型轉(zhuǎn)換263 13.3 C 類型轉(zhuǎn)換運(yùn)算符263 13.3.1 使用static_cast263 13.3.2 使用dynamic_cast和運(yùn)行階段 類型識(shí)別264 13.3.3 使用reinterpret_cast267 13.3.4 使用const_cast267 13.4 C 類型轉(zhuǎn)換運(yùn)算符存在的問題268 13.5 總結(jié)269 13.6 問與答269 13.7 作業(yè)270 13.7.1 測(cè)驗(yàn)270 13.7.2 練習(xí)270 第14章 宏和模板簡(jiǎn)介271 14.1 預(yù)處理器與編譯器271 14.2 使用#define定義常量271 14.3 使用#define編寫宏函數(shù)274 14.3.1 為什么要使用括號(hào)276 14.3.2 使用assert宏驗(yàn)證表達(dá)式276 14.3.3 使用宏函數(shù)的優(yōu)點(diǎn)和缺點(diǎn)277 14.4 模板簡(jiǎn)介278 14.4.1 模板聲明語(yǔ)法278 14.4.2 各種類型的模板聲明279 14.4.3 模板函數(shù)279 14.4.4 模板與類型安全281 14.4.5 模板類281 14.4.6 聲明包含多個(gè)參數(shù)的模板282 14.4.7 聲明包含默認(rèn)參數(shù)的模板283 14.4.8 一個(gè)模板示例283 14.4.9 模板的實(shí)例化和具體化284 14.4.10 模板類和靜態(tài)成員286 14.4.11 參數(shù)數(shù)量可變的模板287 14.4.12 使用static_assert執(zhí)行編譯階段 檢查290 14.4.13 在實(shí)際C 編程中使用模板290 14.5 總結(jié)291 14.6 問與答291 14.7 作業(yè)291 14.7.1 測(cè)驗(yàn)291 14.7.2 練習(xí)292 第15章 標(biāo)準(zhǔn)模板庫(kù)簡(jiǎn)介293 15.1 STL容器293 15.1.1 順序容器293 15.1.2 關(guān)聯(lián)容器294 15.1.3 容器適配器294 15.2 STL迭代器295 15.3 STL算法295 15.4 使用迭代器在容器和算法之間交互295 15.5 選擇正確的容器297 15.6 STL字符串類298 15.7 總結(jié)298 15.8 問與答299 15.9 作業(yè)299 第16章 STL string類300 16.1 為何需要字符串操作類300 16.2 使用STL string類301 16.2.1 實(shí)例化和復(fù)制STL string301 16.2.2 訪問std::string的字符內(nèi)容303 16.2.3 拼接字符串305 16.2.4 在string中查找字符或 子字符串306 16.2.5 截短STL string307 16.2.6 字符串反轉(zhuǎn)309 16.2.7 字符串的大小寫轉(zhuǎn)換310 16.3 基于模板的STL string實(shí)現(xiàn)311 16.4 總結(jié)312 16.5 問與答312 16.6 作業(yè)313 16.6.1 測(cè)驗(yàn)313 16.6.2 練習(xí)313 第17章 STL動(dòng)態(tài)數(shù)組類314 17.1 std::vector的特點(diǎn)314 17.2 典型的vector操作314 17.2.1 實(shí)例化vector314 17.2.2 使用push_back( )在末尾插入 元素316 17.2.3 列表初始化317 17.2.4 使用insert( )在指定位置插入 元素317 17.2.5 使用數(shù)組語(yǔ)法訪問vector中的 元素319 17.2.6 使用指針語(yǔ)法訪問vector中的 元素320 17.2.7 刪除vector中的元素321 17.3 理解大小和容量322 17.4 STL deque 類324 17.5 總結(jié)326 17.6 問與答326 17.7 作業(yè)327 17.7.1 測(cè)驗(yàn)327 17.7.2 練習(xí)327 第18章 STL list和forward_list328 18.1 std::list的特點(diǎn)328 18.2 基本的list操作328 18.2.1 實(shí)例化std::list對(duì)象328 18.2.2 在list開頭或末尾插入元素330 18.2.3 在list中間插入元素331 18.2.4 刪除list中的元素333 18.3 對(duì)list中的元素進(jìn)行反轉(zhuǎn)和排序334 18.3.1 使用list::reverse( )反轉(zhuǎn)元素的 排列順序334 18.3.2 對(duì)元素進(jìn)行排序335 18.3.3 對(duì)包含對(duì)象的list進(jìn)行排序以及 刪除其中的元素337 18.3.4 C 11引入的std::forward_list340 18.4 總結(jié)341 18.5 問與答342 18.6 作業(yè)342 18.6.1 測(cè)驗(yàn)342 18.6.2 練習(xí)342 第19章 STL集合類343 19.1 簡(jiǎn)介343 19.2 STL set和multiset的基本操作344 19.2.1 實(shí)例化std::set對(duì)象344 19.2.2 在set或multiset中插入元素345 19.2.3 在STL set或multiset中查找 元素347 19.2.4 刪除STL set或multiset中的 元素348 19.3 使用STL set和multiset的優(yōu)缺點(diǎn)352 19.4 總結(jié)354 19.5 問與答355 19.6 作業(yè)355 19.6.1 測(cè)驗(yàn)355 19.6.2 練習(xí)355 第20章 STL映射類356 20.1 STL映射類簡(jiǎn)介356 20.2 STL map和multimap的基本操作357 20.2.1 實(shí)例化std::map和 std::multimap357 20.2.2 在STL map或multimap中插入 元素358 20.2.3 在STL map或multimap中查找 元素361 20.2.4 在STL multimap中查找元素363 20.2.5 刪除STL map或multimap中的 元素363 20.3 提供自定義的排序謂詞365 20.4 基于散列表的STL鍵-值對(duì)容器368 20.4.1 散列表的工作原理368 20.4.2 使用unordered_map和unordered_ multimap368 20.5 總結(jié)372 20.6 問與答372 20.7 作業(yè)372 20.7.1 測(cè)驗(yàn)373 20.7.2 練習(xí)373 第21章 理解函數(shù)對(duì)象374 21.1 函數(shù)對(duì)象與謂詞的概念374 21.2 函數(shù)對(duì)象的典型用途374 21.2.1 一元函數(shù)374 21.2.2 一元謂詞378 21.2.3 二元函數(shù)380 21.2.4 二元謂詞381 21.3 總結(jié)383 21.4 問與答384 21.5 作業(yè)384 21.5.1 測(cè)驗(yàn)384 21.5.2 練習(xí)384 第22章 lambda表達(dá)式385 22.1 lambda表達(dá)式是什么385 22.2 如何定義lambda表達(dá)式386 22.3 一元函數(shù)對(duì)應(yīng)的lambda表達(dá)式386 22.4 一元謂詞對(duì)應(yīng)的lambda表達(dá)式387 22.5 通過捕獲列表接受狀態(tài)變量的lambda 表達(dá)式388 22.6 lambda表達(dá)式的通用語(yǔ)法390 22.7 二元函數(shù)對(duì)應(yīng)的lambda表達(dá)式391 22.8 二元謂詞對(duì)應(yīng)的lambda表達(dá)式392 22.9 總結(jié)394 22.10 問與答394 22.11 作業(yè)395 22.11.1 測(cè)驗(yàn)395 22.11.2 練習(xí)395 第23章 STL算法396 23.1 什么是STL算法396 23.2 STL算法的分類396 23.2.1 非變序算法396 23.2.2 變序算法397 23.3 使用STL算法398 23.3.1 根據(jù)值或條件查找元素398 23.3.2 計(jì)算包含給定值或滿足給定條件的 元素?cái)?shù)400 23.3.3 在集合中搜索元素或序列401 23.3.4 將容器中的元素初始化為 指定值403 23.3.5 使用std::generate( )將元素設(shè)置為 運(yùn)行階段生成的值405 23.3.6 使用for_each( )處理指定范圍內(nèi)的 元素406 23.3.7 使用std::transform( )對(duì)范圍進(jìn)行 變換407 23.3.8 復(fù)制和刪除操作409 23.3.9 替換值以及替換滿足給定條件的 元素412 23.3.10 排序、在有序集合中搜索以及刪除 重復(fù)元素413 23.3.11 將范圍分區(qū)415 23.3.12 在有序集合中插入元素417 23.4 總結(jié)419 23.5 問與答419 23.6 作業(yè)419 23.6.1 測(cè)驗(yàn)420 23.6.2 練習(xí)420 第24章 自適應(yīng)容器:棧和隊(duì)列421 24.1 棧和隊(duì)列的行為特征421 24.1.1 棧421 24.1.2 隊(duì)列422 24.2 使用STL stack類422 24.2.1 實(shí)例化stack422 24.2.2 stack的成員函數(shù)423 24.2.3 使用push( )和pop( )在棧頂插入和 刪除元素424 24.3 使用STL queue類425 24.3.1 實(shí)例化queue425 24.3.2 queue的成員函數(shù)426 24.3.3 使用push( )在隊(duì)尾插入以及使用 pop( )從隊(duì)首刪除427 24.4 使用STL優(yōu)先級(jí)隊(duì)列428 24.4.1 實(shí)例化priority_queue類428 24.4.2 priority_queue的成員 函數(shù)429 24.4.3 使用push( )在priority_queue末尾 插入以及使用pop( )在priority_queue 開頭刪除430 24.5 總結(jié)432 24.6 問與答432 24.7 作業(yè)432 24.7.1 測(cè)驗(yàn)432 24.7.2 練習(xí)432 第25章 使用STL位標(biāo)志433 25.1 bitset類433 25.2 使用std::bitset及其成員434 25.2.1 std:bitset的運(yùn)算符434 25.2.2 std::bitset的成員方法435 25.3 vector 25.3.1 實(shí)例化vector 25.3.2 vector 運(yùn)算符438 25.4 總結(jié)439 25.5 問與答439 25.6 作業(yè)439 25.6.1 測(cè)驗(yàn)439 25.6.2 練習(xí)440 第26章 理解智能指針441 26.1 什么是智能指針441 26.1.1 常規(guī)(原始)指針存在的 問題441 26.1.2 智能指針有何幫助442 26.2 智能指針是如何實(shí)現(xiàn)的442 26.3 智能指針類型443 26.3.1 深復(fù)制443 26.3.2 寫時(shí)復(fù)制機(jī)制445 26.3.3 引用計(jì)數(shù)智能指針445 26.3.4 引用鏈接智能指針445 26.3.5 破壞性復(fù)制445 26.3.6 使用std::unique_ptr447 26.4 深受歡迎的智能指針庫(kù)449 26.5 總結(jié)449 26.6 問與答449 26.7 作業(yè)450 26.7.1 測(cè)試450 26.7.2 練習(xí)450 第27章 使用流進(jìn)行輸入和輸出451 27.1 流的概述451 27.2 重要的C 流類和流 對(duì)象452 27.3 使用std::cout將指定格式的數(shù)據(jù) 寫入控制臺(tái)453 27.3.1 使用std::cout修改數(shù)字的顯示 格式453 27.3.2 使用std::cout對(duì)齊文本和設(shè)置 字段寬度455 27.4 使用std::cin進(jìn)行輸入455 27.4.1 使用std::cin將輸入讀取到基本 類型變量中455 27.4.2 使用std::cin:get將輸入讀取到char* 緩沖區(qū)中456 27.4.3 使用std::cin將輸入讀取到 std::string中457 27.5 使用std::fstream處理文件458 27.5.1 使用open( )和close( )打開和關(guān)閉 文件459 27.5.2 使用open( )創(chuàng)建文本文件并使用 運(yùn)算符<<寫入文本460 27.5.3 使用open( )和運(yùn)算符>>讀取文本 文件460 27.5.4 讀寫二進(jìn)制文件461 27.6 使用std::stringstream對(duì)字符串進(jìn)行 轉(zhuǎn)換463 27.7 總結(jié)464 27.8 問與答464 27.9 作業(yè)465 27.9.1 測(cè)驗(yàn)465 27.9.2 練習(xí)465 第28章 異常處理466 28.1 什么是異常466 28.2 導(dǎo)致異常的原因466 28.3 使用try和catch捕獲異常467 28.3.1 使用catch(…)處理所有 異常467 28.3.2 捕獲特定類型的異常468 28.3.3 使用throw引發(fā)特定類型的 異常469 28.4 異常處理的工作原理470 28.4.1 std::exception類472 28.4.2 從std::exception派生出自定義 異常類473 28.5 總結(jié)474 28.6 問與答474 28.7 作業(yè)475 28.7.1 測(cè)驗(yàn)475 28.7.2 練習(xí)475 第29章 繼續(xù)前行477 29.1 當(dāng)今的處理器有何不同477 29.2 如何更好地利用多個(gè)內(nèi)核478 29.2.1 線程是什么478 29.2.2 為何要編寫多線程應(yīng)用 程序479 29.2.3 線程如何交換數(shù)據(jù)479 29.2.4 使用互斥量和信號(hào)量同步 線程480 29.2.5 多線程技術(shù)帶來(lái)的問題480 29.3 編寫杰出的C 代碼480 29.4 C 17有望引入的新特性481 29.4.1 支持在if和switch中進(jìn)行 初始化481 29.4.2 保證復(fù)制得以避免482 29.4.3 避免內(nèi)存分配開銷的 std::string_view482 29.4.4 類型安全的共用體替代品 std::variant483 29.4.5 使用if constexpr有條件地編譯 代碼483 29.4.6 改進(jìn)的lambda表達(dá)式484 29.4.7 在構(gòu)造函數(shù)中使用類型自動(dòng)推斷 功能484 29.5 更深入地學(xué)習(xí)C 484 29.5.1 在線文檔485 29.5.2 提供指南和幫助的社區(qū)485 29.6 總結(jié)485 29.7 問與答485 29.8 作業(yè)485 附錄A 二進(jìn)制和十六進(jìn)制486 A.1 十進(jìn)制486 A.2 二進(jìn)制486 A.2.1 計(jì)算機(jī)為何使用二進(jìn)制487 A.2.2 位和字節(jié)487 A.2.3 1KB相當(dāng)于多少字節(jié)487 A.3 十六進(jìn)制487 A.4 不同進(jìn)制之間的轉(zhuǎn)換488 A.4.1 通用轉(zhuǎn)換步驟488 A.4.2 從十進(jìn)制轉(zhuǎn)換為二進(jìn)制488 A.4.3 從十進(jìn)制轉(zhuǎn)換為十六進(jìn)制489 附錄B C 關(guān)鍵字490 附錄C 運(yùn)算符優(yōu)先級(jí)491 附錄D ASCII碼492 附錄E 答案495
你還可能感興趣
我要評(píng)論
|