精通 C++, 9/e

托尼·加迪斯 (Tony Gaddis), 等

  • 出版商: 清華大學
  • 出版日期: 2018-08-18
  • 定價: $1,188
  • 售價: 8.5$1,010
  • 語言: 簡體中文
  • 頁數: 1214
  • 裝訂: 平裝
  • ISBN: 7302503168
  • ISBN-13: 9787302503163
  • 相關分類: C++ 程式語言
  • 立即出貨 (庫存=1)

買這商品的人也買了...

商品描述

本書自第1版出版以來,就深受廣大讀者歡迎,成為學習C++的經典教材,這是最新的第9版。本書共分19章,從電腦科學的基礎知識和內容開始,

介紹C++程序的基本組成部分,C++語言的語法和結構,類與面向對象編程,文件與I/O操作,遞歸的應用,多態與虛函數,異常處理,模板實現與標準模板庫使用,鏈表的概念與操作,棧與隊列的概念與操作,二叉樹及其操作等。


本書的知識體系完整,編寫體例充分考慮了教學的需要,全書給出了思考題447道,復習與練習題586道,挑戰編程題304道,完整程序362個,非常適合作為高等院校電腦及相關專業程序設計與數據結構的教材,也是精通C++程序設計的首選用書。

目錄大綱

第1章計算機和編程簡介1 
1.1為什麼要使用程序1 
1.2計算機系統:硬件和軟件2 
1.2.1硬件2 
1.2.2軟件5 
1.2.3思考題6 
1.3程序和編程語言6 
1.3.1程序的定義7 
1.3.2編程語言8 
1.3.3源代碼、目標代碼和可執行代碼9 
1.3.4思考題11 
1.4程序的組成11 
1.4.1語言元素11 
1.4.2代碼行和語句13 
1.4.3變量14 
1.4.4變量定義14 
1.5輸入、處理和輸出15 
思考題15 
1.6編程過程16 
1.6.1設計和創建程序16 
1.6.2軟件工程的定義19 
1.6.3思考題20 
1.7綜合演練:顯示個性化消息20 
1.7.1複習和練習21 
1.7.2編程挑戰23 

第2章C++簡介24 
2.1 C++程序的部件24 
思考題27 
2.2 cout對象27 
2.3 #include指令32
思考題33 
2.4變量和賦值語句33 
2.5常數35 
2.5.1有時數字並不是數字36 
2.5.2思考題36 
2.6標識符37 
2.7整型數據類型39 
2.7.1整數和長整型常數42 
2.7.2十六進制和八進制常數43 
2.7.3思考題43 
2.8浮點數據類型44 
2.8.1浮點常數45 
2.8.2將浮點值分配給整型變量46 
2.8.3思考題47 
2.9 char數據類型47 
2.10 C ++ string類51 
2.10.1使用string類51 
2.10.2思考題52 
2.11 bool數據類型52 
2.12確定數據類型的大小53 
2.13變量賦值和初始化詳解54 
2.14作用域56 
2.15算術運算符56 
思考題60 
2.16註釋60 
2.16.1單行註釋61 
2.16.2多行註釋61 
2.17編程風格62 
2.18綜合演練:笑臉!63 
2.18.1複習和練習64 
2.18.2編程挑戰68 

第3章表達式和交互71
3.1 cin對象71 
3.1.1輸入多個值74 
3.1.2思考題76 
3.2數學表達式77 
3.2.1運算符的優先級79 
3.2.2關聯性80 
3.2.3用圓括號分組80 
3.2.4將代數表達式轉換為編程語句81 
3.2.5指數問題詳解81 
3.2.6思考題83 
3.3數據類型轉換和類型強制轉換85 
3.3.1類型強制轉換86 
3.3.2思考題89 
3.4溢出和下溢90 
3.5命名常量91 
思考題93 
3.6多變量和組合賦值94 
3.6.1組合賦值運算符94 
3.6.2思考題96 
3.7格式化輸出97 
3.7.1 setprecision操作符100 
3.7.2 fixed操作符103 
3.7.3 showpoint操作符104 
3.7.4 left和right操作符105 
3.7.5思考題107 
3.8處理字符和字符串107 
3.8.1輸入字符串108 
3.8.2輸入一個字符110 
3.8.3使用cin.get 110
3.8.4混合使用cin >>和cin.get 112 
3.8.5使用cin.ignore 112 
3.8.6實用的string成員函數和運算符113 
3.8.7使用C字符串115 
3.8.8為C字符串賦值116 
3.8.9跟踪一個C字符串的大小117 
3.8.10讀取一行輸入119 
3.8.11思考題120 
3.9更多數學庫函數120 
3.10隨機數字122 
3.10.1限制隨機數的範圍125 
3.10.2思考題125 
3.11關於調試:手動跟踪程序126 
3.12 Green Fields Landscaping案例研究——第1部分127 
3.12.1問題陳述127 
3.12.2程序設計128 
3.12.3程序128 
3.12.4 General Crates公司案例研究130 
3.13綜合演練:單詞遊戲130 
3.13.1複習和練習132 
3.13.2編程挑戰137 

第4章條件選擇143 
4.1關係運算符143 
4.1.1關係的值144 
4.1.2真值和假值145 
4.1.3思考題147
4.2 if語句148 
4.2.1編程風格和if語句151 
4.2.2要注意的3個常見錯誤151 
4.2.3真值詳解153 
4.2.4標記154 
4.2.5整數標記155 
4.2.6思考題155 
4.3 if -else語句156 
4.3.1使用if或if-else的時機157 
4.3.2比較浮點數159 
4.3.3思考題161 
4.4 if-else if語句161 
4.4.1使用結尾else 166 
4.4.2思考題167 
4.5菜單驅動程序168 
4.6嵌套if語句170 
思考題173 
4.7邏輯運算符174 
4.7.1 &&運算符174 
4.7.2 ||運算符176 
4.7.3 !運算符178 
4.7.4布爾變量和?!運算符179 
4.7.5邏輯運算符的優先級和關聯性181 
4.7.6使用邏輯運算符檢查數字範圍182 
4.7.7思考題182 
4.8驗證用戶輸入183 
4.9塊和作用域詳解185 
4.9.1同名變量186 
4.9.2思考題187
4.10字符和字符串詳解188 
4.10.1比較字符188 
4.10.2比較string對象189 
4.10.3測試字符191 
4.10.4思考題193 
4.11條件運算符194 
4.11.1使用條件表達式的值195 
4.11.2思考題197 
4.12 switch語句197 
4.12.1在菜單驅動系統中使用switch 203 
4.12.2思考題205 
4.13枚舉數據類型206 
思考題209 
4.14關於測試和調試:驗證輸出結果210 
4.15 Green Fields Landscaping案例研究——第2部分212 
4.15.1問題陳述212 
4.15.2程序設計213 
4.15.3程序214 
4.15.4 Crazy A1的計算機商業案例研究216 
4.16綜合演練:算命遊戲217 
4.16.1複習和練習218 
4.16. 2編程挑戰222 

第5章循環228 
5.1循環介紹:while循環228 
5.1.1 while循環228 
5.1.2 while是一個預測試循環230
5.1.3無限循環231 
5.1.4編程風格和while循環232 
5.1.5思考題234 
5.2使用while循環驗證輸入235 
5.3遞增和遞減運算符237 
5.3.1後綴和前綴模式239 
5.3.2在數學表達式中使用遞增和遞減運算符241 
5.3.3在關係表達式中使用遞增和遞減運算符241 
5.3.4思考題242 
5.4計數器243 
5.5保持累計匯總245 
5.6標記符號247 
思考題248 
5.7 do-while循環249 
5.7.1 toupper函數251 
5.7.2與菜單一起使用do-while 252 
5.7.3思考題254 
5.8 for循環254 
5.8.1 for循環是一個預測試循環257 
5.8.2避免修改for循環體中的計數器變量257 
5.8.3更新表達式的其他形式258 
5.8.4定義for循環初始化表達式中的變量258 
5.8.5創建用戶控制的for循環258 
5.8.6在初始化和更新表達式中使用多個語句259 
5.8 .7省略for循環的表達式或循環體260 
5.8.8思考題260 
5.9關於軟件工程:決定使用哪個循環261 
5.9.1 while循環261 
5.9.2 do-while循環262 
5.9.3 for循環262 
5.10嵌套循環262 
5.11打破循環265 
5.11. 1在嵌套循環中使用break 266 
5.11.2 continue語句267 
5.11.3思考題268 
5.12使用文件進行數據存儲269 
5.12.1文件類型270 
5.12.2文件訪問方法271 
5.12.3文件名和文件流對象271 
5.12.4為輸入輸出文件設置程序272 
5.12.5創建文件流對象並打開文件273 
5.12.6關閉文件274 
5.12.7將數據寫入文件274 
5.12.8從文件讀取數據276 
5.12.9讀取位置278 
5.12.10讓用戶指定一個文件名279 
5.12.11使用舊版本C++中的
c_str成員函數280 
5.12.12檢測文件的末尾280 
5.12.13測試文件打開的錯誤282 
5.12.14思考題284
5.13關於測試和調試:創建良好的測試數據284 
5.14 Central Mountain Credit Union案例研究287 
5.14.1問題陳述287 
5.14.2計算287 
5.14.3變量287 
5.14.4程序設計288 
5.14.5詳細偽代碼288 
5.14 .6程序289 
5.14.7測試程序291 
5.14.8 Lightening Lanes案例研究291 
5.15綜合演練:多彩世界291 
5.15.1複習和練習294 
5.15.2編程挑戰299 

第6章函數305 
6.1模塊化編程305 
6.2定義和調用函數306 
6.2.1空函數307 
6.2.2調用函數307 
6.2.3思考題313 
6.3函數原型314 
6.4將數據發送到函數中315 
6.5按值傳遞數據320 
思考題322 
6.6使用return語句323 
6.7從函數返回值325 
6.7.1定義一個返回值函數325 
6.7.2調用返回值函數326
6.8返回一個布爾值330 
思考題332 
6.9在菜單驅動程序中使用函數332 
6.10局部變量和全局變量336 
6.10.1局部變量336 
6.10.2局部變量生存期338 
6.10.3使用形參值初始化本地變量338 
6.10.4全局變量338 
6.10.5全局常數340 
6.10.6具有相同名稱的局部變量和全局變量342 
6.11靜態局部變量343 
思考題345 
6.12默認實參346 
6.13使用引用變量作為形參349 
6.13.1按引用傳遞實參和按值傳遞實參的時機353 
6.13.2將文件傳遞給函數355 
6.13.3思考題358 
6.14重載函數359 
6.15使用exit()函數364 
思考題365 
6.16樁模塊和驅動模塊366 
6.17小樂透案例研究369 
6.17.1問題陳述369 
6.17.2程序設計369 
6.17.3程序371 
6.17.4 High Adventrue TravelAgency旅行社案例研究374
6.18綜合演練:發光的南瓜燈374 
6.18.1複習和練習378 
6.18.2編程挑戰381 

第7章類和對像簡介388 
7.1抽像數據類型388 
7.1.1抽象388 
7.1.2在軟件開發中使用抽象389 
7.1.3抽像數據類型389 
7.2面向對象編程389 
7.3關於類的介紹391 
7.3.1使用已經知道的類391 
7.3.2創建自己的類392 
7.3.3訪問修飾符393 
7.3.4 private和public成員的位置393 
7.4創建和使用對象394 
7.4.1訪問對象的成員395 
7.4.2訪問器和設置器396 
7.5定義成員函數397 
7.5.1類成員函數的命名約定399 
7.5.2避免陳舊數據402 
7.5.3內聯函數詳解402 
7.5.4思考題403 
7.6構造函數403 
7.6.1重載構造函數407 
7.6.2默認構造函數408 
7.7析構函數409 
思考題410 
7.8私有成員函數412 
7.9將對像傳遞給函數415
7.9.1常量引用形參418 
7.9.2從函數返回一個對象419 
7.9.3思考題422 
7.10對象組合422 
思考題425 
7.11關於軟件工程:分離類規範、實現和客戶端代碼426 
7.11.1使用多個文件的優點431 
7.11.2在類對像中執行輸入輸出432 
7.11.3思考題432 
7.12結構432 
7.12.1訪問結構成員433 
7.12.2顯示和比較結構變量435 
7.12.3初始化結構436 
7.12.4嵌套結構437 
7.12.5思考題440 
7.12.6將結構傳遞給函數441 
7.12.7從函數返回一個結構443 
7.12.8思考題444 
7.13枚舉數據類型詳解445 
7.13.1在同一個語句中聲明enum數據類型並定義變量445 
7.13.2將整數賦值給enum變量445 
7.13.3將枚舉量賦值給int變量446 
7.13.4使用數學運算符改變enum變量的值446 
7.13.5使用枚舉量輸出值446
7.13.6使用枚舉量控制循環447 
7.13.7使用C++ 11中的強類型enum 448 
7.14 Home Software公司OOP案例研究449 
7.14.1私有成員變量450 
7.14.2公共成員函數450 
7.14.3類聲明450 
7.14.4 withdraw會員函數451 
7.14.5類接口452 
7.14.6實現類452 
7.15面向對象分析與設計介紹456 
7.15.1尋找類459 
7.15.2確定類的責任462 
7.15.3這僅僅是個開始465 
7.15 .4對象的可重用性465 
7.15.5面向對象與基於對象的編程465 
7.15.6思考題465 
7.16屏幕控制466 
7.16.1屏幕光標定位466 
7.16.2創建一個屏幕輸入表單469 
7.17綜合演練:溜溜球動畫471 
7.17.1複習和練習473 
7.17.2編程挑戰479
 
第8章數組486 
8.1保存多個值的數組486 
8.2訪問數組元素488 
8.3輸入和顯示數組內容489
8.3.1將數據從文件讀入數組491 
8.3.2將數組的內容寫入文件493 
8.3.3 C++中沒有數組邊界檢查493 
8.3.4注意大小差一錯誤495 
8.3.5思考題496 
8.4數組初始化497 
8.4.1從數組元素1開始501 
8.4.2數組部分初始化501 
8.4.3隱式數組大小503 
8.4.4初始化變量的新方法503 
8.5基於範圍的for循環504 
8.6處理數組內容507 
8.6.1複製一個數組到另一個509 
8.6.2比較兩個數組510 
8.6.3對數字數組中的值求和511 
8.6.4查找數字數組中數值的平均值511 
8.6.5在數字數組中查找最高值和最低值512 
8.6.6部分填充數組514 
8.6.7為什麼要使用數組515 
8.6.8處理字符串517 
8.7使用並行數組519 
思考題521 
8.8 typedef聲明523 
8.9數組作為函數參數523 
8.9.1使用const數組形參529 
8.9.2一些有用的數組函數529 
8.9.3思考題532
8.10二維數組533 
8.10.1將二維數組傳遞給函數537 
8.10.2對二維數組的所有元素求和539 
8.10.3對二維數組的行求和539 
8.10.4對二維數組的列求和540 
8.11三維或三維以上數組541 
思考題543 
8.12矢量544 
8.12.1定義和初始化矢量545 
8.12.2存儲和檢索矢量中的值546 
8.12.3使用C++ 11中基於範圍的for循環和vector 548 
8.12.4使用push_back成員函數549 
8.12.5確定矢量的大小550 
8.12.6從矢量中刪除元素552 
8.12.7清理矢量553 
8.12.8檢測一個空矢量554 
8.12.9矢量成員函數匯總556 
8.12.10思考題556 
8.13對像數組* 557 
8.13.1思考題562 
8.13.2結構數組563 
8.13.3思考題566 
8.14 National Commerce Bank案例研究567 
8.15綜合演練:石頭、剪刀、布569 
8.15.1複習和練習571
8.15.2編程挑戰575 

第9章搜索、排序和算法分析585 
9.1搜索算法簡介585 
9.1.1線性搜索585 
9.1.2二分搜索588 
9.2搜索對像數組591 
思考題595 
9.3排序算法簡介595 
9.3.1冒泡排序595 
9.3.2選擇排序599 
9.3.3思考題604 
9.4對像數組排序604 
9.5矢量排序和搜索607 
9.6算法分析簡介609 
9.6.1計算問題和基本步驟610 
9.6.2算法的複雜度611 
9.6. 3算法的最壞情況下的複雜度613 
9.6.4平均情況下的複雜度615 
9.6.5漸近複雜度與大O表示法615 
9.6.6思考題617 
9.7案例研究617 
9.8綜合演練:秘密消息617 
9.8.1複習和練習622 
9.8.2編程挑戰623 

第10章指針627 
10.1指針和地址運算符627 
10.2指針變量629 
10.3數組與指針之間的關係632 
10.4指針的算術運算637 
10.5初始化指針638
思考題640 
10.6比較指針641 
10.7使用指針作為函數形參643 
10.8指向常量的指針和常量指針647 
10.8.1指向常量的指針647 
10.8.2將一個非常量實參傳遞到一個指向常量的指針中648 
10.8.3常量指針649 
10.8.4指向常量的常量指針651 
10.9關於軟件工程:動態內存分配651 
10.10關於軟件工程:從函數返回指針655 
10.10.1停止內存洩漏658 
10.10.2思考題660 
10.11類對象和結構的指針662 
10.11.1類對象的動態分配663 
10.11.2使用指向類對象的指針作為函數形參665 
10.12關於軟件工程:選擇對象成員667 
思考題668 
10.13智能指針669 
10.13.1 unique_ptr類669 
10.13.2指向數組的獨占指針672 
10.13.3 unique_ptr類的成員函數673 
10.13.4 shared_ptr類675 
10.13.5共享指針組676 
10.13.6雙重管理的危險677
10.13.7 make_shared<T>()函數677 
10.13.8 shared_ptr成員函數677 
10.13.9指向數組的共享指針678 
10.14綜合演練:對不起,考試時間已到678 
10.14.1複習和練習681 
10.14.2編程挑戰685 

第11章類和麵向對象編程詳解688 
11.1 this指針和常量成員函數688 
11.1.1 this指針688 
11.1.2常量成員函數692 
11.2靜態成員693 
11.2.1靜態成員變量694 
11.2.2靜態成員函數697 
11.3類的友元700 
思考題705 
11.4按成員賦值705 
11.5複製構造函數707 
11.5.1默認複製構造函數708 
11.5.2默認複製構造函數的缺陷709 
11.5.3程序員定義的複制構造函數712 
11.5. 4複製構造函數的調用715 
11.5.5思考題716 
11.6運算符重載716 
11.6.1重載賦值運算符716 
11.6.2類賦值運算符的返回值718
11.6.3類賦值運算符的實現718 
11.6.4重載其他運算符722 
11.6.5運算符重載的一些基本問題723 
11.6.6運算符重載的方法724 
11.6.7重載算術和關係運算符724 
11.6. 8在獨立函數和成員函數運算符之間作出選擇727 
11.6.9重載前綴++運算符729 
11.6.10重載後綴++運算符729 
11.6.11重載流插入和提取運算符730 
11.6. 12重載[ ]運算符734 
11.6.13思考題738 
11.7右值引用和移動操作738 
11.7.1左值和右值739 
11.7.2移動構造函數和移動賦值運算符740 
11.7.3編譯器使用移動操作的時機748 
11.7.4默認操作748 
11.8函數對象和Lambda表達式749 
11.8.1謂詞函數750 
11.8.2使用函數對像作為函數的形參751 
11.8.3排序數組和矢量751 
11.8.4從矢量中刪除元素752 
11.8.5可存儲值的函數對象754 
11.8.6返回void的函數對象755
11.8.7在C++庫中的函數類756 
11.8.8 Lambda表達式758 
11.8.9思考題759 
11.9類型轉換運算符759 
11.10轉換構造函數762 
思考題765 
11.11聚合和組合766 
11.11.1成員初始化列表766 
11.11.2通過指針聚合768 
11.11.3聚合、組合和對像生命週期769 
11.11.4 Has-a關係771 
11.12繼承772 
11.12.1普遍性和特殊性772 
11.12.2繼承與Is-a關係772 
11.12 .3繼承和指針774 
11.12.4超類和子類777 
11.12.5多繼承777 
11.13受保護的成員和類訪問777 
11.13.1基類訪問規範780 
11.13.2思考題781 
11.14構造函數、析構函數和繼承782 
11.14.1將實參傳遞給基類構造函數784 
11.14.2思考題786 
11.15覆蓋基類函數788 
11.15.1在基類函數和派生類覆蓋版本之間做出選擇790 
11.15. 2重載和覆蓋的區別790
11.15.3獲取被覆蓋成員函數的訪問權限790 
11.16綜合演練:將數據發佈到互聯網791 
11.16.1複習和練習795 
11.16.2編程挑戰800 

第12章C字符串和string類詳解804 
12.1 C字符串804 
12.1.1字符串常數805 
12.1.2程序員定義的字符數組806 
12.1.3指向char的指針807 
12.2處理C字符串的庫函數809 
12.2.1 strlen函數809 
12.2.2傳遞C字符串實參809 
12.2.3 strcat函數809 
12.2.4 strcpy函數810 
12.2.5比較C字符串811 
12.2.6 strcmp函數812 
12.2.7結合使用?!運算符與strcmp 815 
12.2.8排序字符串815 
12.2.9思考題816 
12.3數字和字符串之間的轉換818 
12.3.1使用字符串流對象進行數字轉換818 
12.3.2數字轉換函數820 
12.3.3思考題822 
12.4編寫自己的C字符串處理函數822 
12.4.1使用指針傳遞C字符串實參826 
12.4.2思考題827 
12.5 C++ string類詳解828 
12.6 Advanced Software Enterprises案例研究830 
12.7綜合演練:程序執行環境831 
12.7.1複習和練習833 
12.7.2編程挑戰836 

第13章高級文件和I /O操作841 
13.1輸入和輸出流841 
13.1.1文件流類841 
13.1.2文件打開模式844 
13.1.3使用構造函數打開文件844 
13.1.4輸出格式化和I/O操作符844 
13.1.5思考題848 
13.2詳細的錯誤測試849 
13.3讀取和寫入文件的成員函數852 
13.3.1 getline函數853 
13.3.2 get系列成員函數857 
13.3.3 peek成員函數858 
13.3.4 put成員函數860 
13.3.5倒回文件的開始位置861 
13.3.6思考題863 
13.4二進製文件865 
13.5使用結構創建記錄869 
思考題873 
13.6隨機訪問文件873
13.6.1 seekp和seekg成員函數874 
13.6.2 tellp和tellg成員函數878 
13.7打開文件進行輸入和輸出880 
思考題885 
13.8 Online Friendship Connections案例研究:對象序列化885 
13.8.1對象序列化886 
13.8.2設計程序需要的類886 
13.8.3確定序列化方案887 
13.9綜合演練:合併文件和設置HTML顏色891 
13.9.1複習和練習895 
13.9.2編程挑戰898 

第14章遞歸902 
14.1遞歸介紹902 
14.1.1直接遞歸和間接遞歸907 
14.1.2思考題907 
14.2遞歸計算階乘函數908 
14.3遞歸計算最大公約數函數910 
14.4解決遞歸式定義的問題911 
14.5遞歸二分搜索函數913 
14.6關於問題解決和程序設計:快速排序算法915 
14.7漢諾塔919 
14.8關於問題解決:窮舉和枚舉算法923 
14.9關於軟件工程:遞歸與迭代926 
14.10綜合演練:中綴和前綴表達式926 
14.10.1複習和練習930
14.10.2編程挑戰932 

第15章多態和虛函數935 
15.1繼承層次結構中的類型兼容性935 
15.1.1繼承的層次結構935 
15.1.2繼承的類型兼容性935 
15.1.3基類指針的類型強制轉換939 
15.2多態和虛成員函數941 
15.2.1動態和靜態綁定946 
15.2.2 C++ 11的override和final關鍵字947 
15.2.3防止成員函數被覆蓋949 
15.3抽象基類和純虛函數949 
思考題952 
15.4關於面向對象編程:組合與繼承的對比956 
15.5 Secure Encryption System公司
15.5.1理解問題960 
15.5.2一個簡單的加密/解密框架961 
15.6綜合演練:移動圖形964 
15.6.1複習和練習971 
15.6.2編程挑戰973 

第16章異常、模板和標準模板庫975 
16.1異常975 
16.1.1拋出異常976 
16.1.2處理異常976 
16.1.3異常未被捕獲的情形978
16.1.4面向對象的異常處理類978 
16.1.5多個異常980 
16.1.6從異常類中提取信息982 
16.1.7處理由new引發的bad_alloc異常985 
16.1.8棧展開986 
16.1.9重新拋出異常986 
16.1.10思考題987 
16.2函數模板987 
16.2.1 swap函數模板990 
16.2.2在函數模板中使用運算符992 
16.2.3使用多種類型的函數模板993 
16.2.4函數模板重載994 
16.2 .5定義模板函數995 
16.2.6思考題995 
16.3類模板995 
16.4類模板和繼承1001 
思考題1004 
16.5標準模板庫簡介1005 
16.5.1順序容器1005 
16.5.2關聯容器1005 
16.5.3迭代器1006 
16.5 .4迭代器的使用1006 
16.5.5 vector容器1009 
16.5.6算法1010 
16.6綜合演練:單詞變形遊戲1018 
16.6.1複習和練習1021 
16.6.2編程挑戰1022

第17章鍊錶1026 
17.1鍊錶ADT簡介1026 
17.1.1鍊錶對數組和矢量的優點1026 
17.1.2鍊錶的結構1026 
17.1.3鍊錶的C++表示1027 
17.1.4使用構造函數初始化結點1029 
17.1.5建立一個鍊錶1030 
17.1.6遍歷鍊錶1030 
17.1.7思考題1032 
17.2鍊錶操作1032 
17.2.1添加一個元素到鍊錶中1034 
17.2.2顯示鍊錶1035 
17.2.3銷毀鍊錶1035 
17.2.4按排序順序建立鍊錶1037 
17.2.5將結點插入排序鍊錶1037 
17.2.6思考題1040 
17.2.7從鍊錶中刪除元素1040 
17.2.8思考題1043 
17.3鍊錶模板* 1044 
17.4遞歸鍊錶操作1048 
17.4.1遞歸鍊錶函數1048 
17.4. 2遞歸成員函數1051 
17.4.3遞歸add成員函數1052 
17.4.4遞歸remove成員函數1054 
17.5鍊錶的變體1057 
17.6 STL list容器* 1058
17.7 Reliable Software Systems公司案例研究1060 
17.7.1問題陳述1060 
17.7.2修改和類設計規劃1061 
17.7.3類成員函數的實現1061 
17.8綜合演練:跑步穿過屏幕動畫1064 
17.8.1使用圖像映射表示形狀1064 
17.8.2動畫基礎1066 
17.8.3實施細節1066 
17.8.4複習和練習1070 
17.8.5編程挑戰1073 

第18章棧和隊列1076 
18.1棧ADT簡介1076 
18.1.1定義1076 
18.1.2棧的應用1076 
18.1.3靜態棧和動態棧1077 
18.1.4棧操作1077 
18.1.5靜態棧類1077 
18.1.6處理棧異常1082 
18.1.7棧模板1083 
18.2動態棧1083 
18.3標準模板庫stack容器* 1087 
思考題1089 
18.4隊列ADT簡介1089 
18.4.1定義1089 
18.4.2隊列的應用1089 
18.4.3靜態隊列和動態隊列1090 
18.4.4隊列操作1090
18.4.5使用循環數組檢測滿隊列和空隊列1092 
18.4.6靜態隊列類1092 
18.4.7靜態隊列中的溢出和下溢異常1096 
18.5動態隊列1096 
18.6標準模板庫deque和queue容器* 1100 
18.6.1 deque容器1100 
18.6.2 queue容器適配器1102 
18.7關於問題解決和程序設計:消除遞歸1103 
18.8綜合演練:將後綴表達式轉換為中綴表達式1107 
18.8.1複習和練習1110 
18.8.2編程挑戰1112 

第19章二叉樹1116 
19.1二叉樹的定義和應用1116 
19.1.1二叉樹的實現1116 
19.1.2二叉樹的應用1118 
19.1.3思考題1119 
19.2二叉搜索樹操作1119 
19.2.1創建二叉搜索樹1119 
19.2.2二叉搜索樹操作的實現1122 
19.2.3插入一個元素1123 
19.2.4遍歷樹1124 
19.2.5搜索二叉搜索樹1126 
19.2.6刪除元素1128 
19.2.7思考題1136
19.3二叉搜索樹模板注意事項1136 
19.4綜合演練:譜系樹1137 
19.4.1複習和練習1142 
19.4.2編程挑戰1143 

附錄A ASCII字符集1146 

附錄B運算符優先級和關聯性1150 

附錄C思考題答案1151 

附錄D複習和練習奇數題的答案1193