具體描述
內容介紹
C 之父BjarneStroustrup經典著作《C 程序設計:原理與實踐(原書D2版)》基於新的C 11和C 14,廣泛地介紹瞭程序設計的基本概念和技術,包括類型係統、算術運算、控製結構、錯誤處理等;介紹瞭從鍵盤和文件獲取數值和文本數據的方法以及以圖形化方式錶示數值數據、文本和幾何圖形;介紹瞭C 標準庫中的容器(如嚮量、列錶、映射)和算法(如排序、查找和內積)的設計和使用。同時還對C 思想和曆史進行瞭詳細的討論,很好地拓寬瞭讀者的視野。為方便讀者循序漸進學習,加上篇幅所限,《C 程序設計:原理與實踐(原書D2版)》分為基礎篇和進階篇兩冊齣版,基礎篇包括D0~11章、D17~19章和附錄A、C,進階篇包括D12~16章、D20~27章和附錄B、D、E。本書是進階篇。本書通俗易懂、實例豐富,可作為大學計算機、電子工程、信息科學等相關專業的教材,也可供相關專業人員參考。
目錄
目 錄 Programming: Principles and Practice Using C , Second Edition 齣版者的話 譯者序 前言 引言 作者簡介 D15章 容器和迭代器 1 15.1 存儲和處理數據 1 15.1.1 處理數據 1 15.1.2 泛化代碼 2 15.2 STL理念 4 15.3 序列和迭代器 7 15.3.1 迴到實例 8目 錄
Programming: Principles and Practice Using C , Second Edition
齣版者的話
譯者序
前言
引言
作者簡介
D15章 容器和迭代器 1
15.1 存儲和處理數據 1
15.1.1 處理數據 1
15.1.2 泛化代碼 2
15.2 STL理念 4
15.3 序列和迭代器 7
15.3.1 迴到實例 8
15.4 鏈錶 9
15.4.1 鏈錶操作 11
15.4.2 遍曆 12
15.5 再次泛化vector 13
15.5.1 遍曆容器 15
15.5.2 auto 15
15.6 實例:一個簡單的文本編輯器 16
15.6.1 處理行 18
15.6.2 遍曆 18
15.7 vector、list和string 21
15.7.1 insert和erase 22
15.8 調整vector類達到STL版本的功能 24
15.9 調整內置數組達到STL版本的功能 26
15.10 容器概覽 27
15.10.1 迭代器類彆 28
簡單練習 29
思考題 30
術語 30
習題 31
附言 32
D16章 算法和映射 33
16.1 標準庫算法 33
16.2 Z簡單的算法f?ind() 34
16.2.1 一些一般的應用 35
16.3 通用搜索算法f?ind_if() 36
16.4 函數對象 38
16.4.1 函數對象的抽象視圖 39
16.4.2 類成員上的斷言 39
16.4.3 lambda錶達式 40
16.5 數值算法 41
16.5.1 纍積 42
16.5.2 泛化accumulate() 43
16.5.3 內積 44
16.5.4 泛化inner_product() 45
16.6 關聯容器 45
16.6.1 map 46
16.6.2 map概覽 47
16.6.3 另一個map實例 50
16.6.4 uDrdered_map 51
16.6.5 set 53
16.7 拷貝 54
16.7.1 基本拷貝算法 55
16.7.2 流迭代器 55
16.7.3 使用set保持順序 57
16.7.4 copy_if 57
16.8 排序和搜索 58
16.9 容器算法 60
簡單練習 60
思考題 61
術語 62
習題 62
附言 63
D17章 一個顯示模型 64
17.1 為什麼要使用圖形 64
17.2 一個基本顯示模型 65
17.3 D一個例子 66
17.4 使用GUI庫 68
17.5 坐標係 69
17.6 Shape 70
17.7 使用Shape類 70
17.7.1 圖形頭文件和主函數 70
17.7.2 一個幾乎空白的窗口 71
17.7.3 坐標軸 73
17.7.4 繪製函數圖 74
17.7.5 Polygon 75
17.7.6 Rectangle 76
17.7.7 填充 78
17.7.8 Text 78
17.7.9 Image 80
17.7.10 更多未討論的內容 81
17.8 讓圖形程序運行起來 81
17.8.1 源文件 82
簡單練習 83
思考題 83
術語 83
習題 84
附言 84
D18章 圖形類 85
18.1 圖形類概覽 85
18.2 Point和Line 87
18.3 Lines 88
18.4 Color 91
18.5 Line_style 93
18.6 Open_polyline 95
18.7 Closed_polyline 96
18.8 Polygon 97
18.9 Rectangle 99
18.10 管理未命名對象 102
18.11 Text 104
18.12 Circle 105
18.13 Ellipse 107
18.14 Marked_polyline 108
18.15 Marks 110
18.16 Mark 111
18.17 Image 112
簡單練習 114
思考題 115
術語 115
習題 116
附言 116
D19章 設計圖形類 117
19.1 設計原則 117
19.1.1 類型 117
19.1.2 操作 118
19.1.3 命名 119
19.1.4 可變性 120
19.2 Shape 121
19.2.1 一個抽象類 122
19.2.2 訪問控製 123
19.2.3 繪製形狀 125
19.2.4 拷貝和可變性 127
19.3 基類和派生類 128
19.3.1 對象布局 130
19.3.2 類的派生和虛函數的定義 131
19.3.3 覆蓋 131
19.3.4 訪問 133
19.3.5 純虛函數 134
19.4 麵嚮對象程序設計的好處 135
簡單練習 136
思考題 136
術語 137
習題 137
附言 138
D20章 繪製函數圖和數據圖 139
20.1 簡介 139
20.2 繪製簡單函數圖 139
20.3 Function 143
20.3.1 默認參數 143
20.3.2 更多例子 144
20.3.3 lambda錶達式 146
20.4 Axis 146
20.5 近似 148
20.6 繪製數據圖 152
20.6.1 讀取文件 153
20.6.2 一般布局 154
20.6.3 數據比例 155
20.6.4 構造數據圖 156
簡單練習 158
思考題 159
術語 159
習題 159
附言 160
D21章 圖形用戶界麵 161
21.1 用戶界麵的選擇 161
21.2 “Next”按鈕 162
21.3 一個簡單的窗口 163
21.3.1 迴調函數 164
21.3.2 等待循環 166
21.3.3 lambda錶達式作為迴調函數 166
21.4 Button和其他Widget 167
21.4.1 Widget 167
21.4.2 Button 168
21.4.3 In_box和Out_box 169
21.4.4 Menu 170
21.5 一個實例 170
21.6 控製流反轉 173
21.7 添加菜單 174
21.8 調試GUI代碼 178
簡單練習 179
思考題 179
術語 180
習題 180
附言 181
D22章 理念和曆史 182
22.1 曆史、理念和專業水平 182
22.1.1 程序設計語言的目標和哲學 182
22.1.2 編程理念 183
22.1.3 風格/範型 188
22.2 程序設計語言曆史概覽 190
22.2.1 Z早的程序設計語言 191
22.2.2 現代程序設計語言的起源 193
22.2.3 Algol傢族 197
22.2.4 Simula 203
22.2.5 C 204
22.2.6 C 207
22.2.7 JT 209
22.2.8 參考資料 210
思考題 211
顯示全部信息
C++程序設計原理與實踐 (進階篇) 深入理解 C++ 的核心機製,掌握高級編程技巧,構建高效、可維護的現代 C++ 應用。 本書是《C++程序設計原理與實踐》係列的進階篇,旨在為已經掌握 C++ 基礎知識的開發者提供一條通往精通之路。它不僅僅是語法糖的堆砌,而是深入到 C++ 語言設計的哲學與實踐中,揭示其強大與靈活的背後原理,教會您如何運用這些原理來解決更復雜、更具挑戰性的軟件開發問題。如果您希望擺脫“會用 C++”到“精通 C++”的蛻變,這本書將是您不可或缺的夥伴。 本書的定位與目標讀者: 本書適閤具備 C++ 基礎(包括變量、數據類型、控製流、函數、類、繼承、多態等)的開發者,希望進一步提升自己的 C++ 功力,能夠獨立設計和實現高性能、可擴展、易於維護的軟件係統。這包括但不限於: 有一定 C++ 開發經驗,但感覺技術瓶頸的程序員: 渴望深入理解 C++ 的底層機製,掌握更高級的抽象和設計模式。 計算機科學及相關專業的本科生或研究生: 在完成基礎課程後,需要更深入地學習 C++ 以應對實際的項目開發或學術研究。 尋求從其他語言轉到 C++ 的開發者: 在掌握 C++ 基礎後,希望快速提升至能夠勝任復雜 C++ 項目的水平。 希望理解現代 C++ 特性的開發者: 瞭解 C++11, C++14, C++17, C++20 等新標準帶來的強大功能,並知道如何有效地應用它們。 本書的核心內容: 本書將圍繞 C++ 的高級主題展開,以原理講解與實踐應用相結閤的方式,帶您領略 C++ 的博大精深。 第一部分:理解 C++ 的核心機製與高級特性 內存管理精粹: 堆與棧的深層剖析: 深入理解動態內存分配的原理,包括 `new` 和 `delete` 的生命周期管理,以及它們與棧上自動變量的區彆。探討內存泄漏、野指針、懸垂指針等常見問題的根源與防範。 智能指針的演進與應用: 全麵解析 `std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr` 的設計理念、使用場景、性能考量以及它們如何有效地自動化內存管理,避免手動 `new`/`delete` 的陷阱。 自定義內存分配器: 學習如何為特定場景設計和實現高效的內存分配策略,例如對象池、內存對齊等,以優化性能和降低內存碎片。 模闆元編程(TMP)的力量: 模闆是圖靈完備的: 揭示模闆不僅僅是代碼的“參數化”,更是強大的編譯時計算工具。 編譯時類型計算與代碼生成: 掌握如何利用模闆在編譯時進行復雜的類型推導、數值計算,甚至生成高度優化的代碼。 SFINAE(Substitution Failure Is Not An Error)與概念(Concepts): 學習如何控製模闆的實例化,實現更精細的編譯時分派,以及 C++20 引入的 Concepts 如何使模闆約束更加清晰易懂。 實際應用: 演示 TMP 在實現泛型算法、數值計算庫、序列化、編譯時多態等方麵的實際威力。 麵嚮對象設計的深度探索: RAII(Resource Acquisition Is Initialization)原則: 深入理解 RAII 作為 C++ 最核心的設計模式之一,以及它如何在構造函數中獲取資源,在析構函數中釋放資源,從而實現異常安全和資源管理的自動化。 麵嚮接口編程與抽象基類: 學習如何設計純虛函數、抽象基類,以及如何通過麵嚮接口編程來提高代碼的靈活性和可擴展性。 組閤優於繼承: 深入探討組閤模式在 C++ 中的應用,如何通過組閤來構建更靈活、更易於維護的設計,避免繼承帶來的耦閤問題。 設計模式在 C++ 中的應用: 結閤實際 C++ 代碼,深入剖析工廠模式、單例模式、觀察者模式、策略模式等經典設計模式的實現細節與最佳實踐。 第二部分:構建健壯、高效的現代 C++ 應用 並發與多綫程編程: 綫程的創建與管理: 學習 `std::thread` 的使用,綫程的生命周期管理,以及如何避免綫程競爭。 同步機製: 深入理解互斥量 (`std::mutex`, `std::recursive_mutex`)、條件變量 (`std::condition_variable`)、讀寫鎖等同步原語,以及它們如何保證數據在多綫程環境下的訪問安全。 原子操作: 學習 `std::atomic` 如何實現無鎖的原子操作,從而在某些場景下提供比互斥量更高的性能。 並發設計模式: 介紹生産者-消費者模式、綫程池等在實際並發編程中的應用。 C++20 並發新特性: 探索 C++20 帶來的協程(Coroutines)等更高級的並發模型。 異常安全編程: 異常的傳播與捕獲: 深入理解 C++ 異常處理機製的工作原理,以及如何正確地拋齣和捕獲異常。 異常安全的承諾: 學習強異常安全(Strong Exception Guarantee)、基本異常安全(Basic Exception Guarantee)和無異常安全(No Exception Guarantee)的概念,以及如何編寫滿足不同異常安全級彆的代碼。 RAII 與異常安全: 再次強調 RAII 在實現異常安全中的關鍵作用。 麵嚮泛型的 C++(Generic Programming): STL(Standard Template Library)的深入理解: 不僅是使用 STL 容器和算法,更要理解它們的設計原理、性能特點,以及如何根據實際需求選擇最閤適的 STL 組件。 自定義泛型容器與算法: 學習如何設計和實現自己的泛型容器和算法,使其能夠與 STL 良好地協同工作。 迭代器(Iterators)的藝術: 深入理解不同類型的迭代器(輸入、輸齣、前嚮、雙嚮、隨機訪問)及其特性,以及如何有效地利用迭代器進行數據訪問與處理。 Lambda 錶達式的強大之處: 掌握 C++11 引入的 Lambda 錶達式,及其在簡化算法調用、構建匿名函數、實現迴調等方麵的強大能力。 性能優化與剖析: 理解 C++ 的性能特點: 深入分析 C++ 的編譯時與運行時性能,以及不同語言特性的性能影響。 代碼剖析工具的應用: 學習使用 gprof, perf, VTune 等工具來識彆性能瓶頸,進行有針對性的優化。 優化策略: 探討算法優化、數據結構選擇、內存布局優化、緩存利用、SIMD 指令等多種性能優化手段。 避免常見的性能陷阱: 識彆並避免不必要的拷貝、虛函數調用、大量的動態內存分配等性能殺手。 第三部分:麵嚮現代軟件工程的實踐 構建係統與依賴管理: CMake 的高級用法: 掌握 CMake 的腳本編寫,如何處理復雜的項目結構、依賴關係,以及交叉編譯。 包管理工具介紹: 瞭解 Conan, vcpkg 等現代 C++ 包管理工具,如何簡化第三方庫的集成。 單元測試與持續集成: 編寫高質量的單元測試: 學習使用 Google Test, Catch2 等流行的 C++ 測試框架,編寫可維護、可擴展的單元測試。 測試驅動開發(TDD)理念: 理解 TDD 如何指導開發過程,提高代碼質量。 持續集成(CI)的實踐: 瞭解如何將單元測試集成到 CI 流程中,實現自動化構建、測試與部署。 代碼質量與可維護性: 編碼規範與風格: 強調統一的編碼風格對團隊協作和代碼可讀性的重要性。 靜態代碼分析工具: 學習使用 Clang-Tidy, Cppcheck 等工具,在編譯期發現潛在的錯誤和代碼異味。 代碼審查(Code Review)的最佳實踐: 瞭解如何進行有效的代碼審查,促進知識共享,提高代碼質量。 本書的特色: 注重原理: 每一項技術都深入剖析其設計思想和底層原理,幫助讀者知其然也知其所以然。 實踐導嚮: 大量結閤實際代碼示例,展示高級特性的應用場景與最佳實踐。 現代 C++ 視角: 緊跟 C++ 標準的發展,重點介紹 C++11, C++14, C++17, C++20 等新標準帶來的重要特性。 由淺入深: 在鞏固基礎的同時,逐步引導讀者進入 C++ 的高級殿堂。 體係化學習: 將 C++ 的高級主題進行係統梳理,構建完整的知識體係。 結語: 掌握 C++ 的高級技巧,意味著您將能更自信地駕馭復雜項目,設計齣更優雅、更高效、更可靠的軟件。本書並非速成手冊,而是希望陪伴您一起踏上 C++ 精進之旅,讓您成為一名真正的 C++ 工程師,能夠用 C++ 的力量創造齣令人贊嘆的軟件作品。