關(guān)于我們
書單推薦
新書推薦
|
C++程序設(shè)計(jì):原理與實(shí)踐(進(jìn)階篇)(原書第2版)
C++之父BjarneStroustrup經(jīng)典著作《C++程序設(shè)計(jì):原理與實(shí)踐(原書第2版)》基于新的C++11和C++14,廣泛地介紹了程序設(shè)計(jì)的基本概念和技術(shù),包括類型系統(tǒng)、算術(shù)運(yùn)算、控制結(jié)構(gòu)、錯(cuò)誤處理等;介紹了從鍵盤和文件獲取數(shù)值和文本數(shù)據(jù)的方法以及以圖形化方式表示數(shù)值數(shù)據(jù)、文本和幾何圖形;介紹了C++標(biāo)準(zhǔn)庫中的容器(如向量、列表、映射)和算法(如排序、查找和內(nèi)積)的設(shè)計(jì)和使用。同時(shí)還對C++思想和歷史進(jìn)行了詳細(xì)的討論,很好地拓寬了讀者的視野。為方便讀者循序漸進(jìn)學(xué)習(xí),加上篇幅所限,《C++程序設(shè)計(jì):原理與實(shí)踐(原書第2版)》分為基礎(chǔ)篇和進(jìn)階篇兩冊出版,基礎(chǔ)篇包括第0~11章、第17~19章和附錄A、C,進(jìn)階篇包括第12~16章、第20~27章和附錄B、D、E。本書是進(jìn)階篇。本書通俗易懂、實(shí)例豐富,可作為大學(xué)計(jì)算機(jī)、電子工程、信息科學(xué)等相關(guān)專業(yè)的教材,也可供相關(guān)專業(yè)人員參考。
前 言Programming: Principles and Practice Using C++, Second Edition
該死的魚雷!全速前進(jìn)。
——Admiral Farragut程序設(shè)計(jì)是這樣一門藝術(shù),它將問題求解方案描述成計(jì)算機(jī)可以執(zhí)行的形式。程序設(shè)計(jì)中很多工作都花費(fèi)在尋找求解方案以及對其求精上。通常,只有在真正編寫程序求解一個(gè)問題的過程中才會(huì)對問題本身理解透徹。
本書適合于那些從未有過編程經(jīng)驗(yàn)但愿意努力學(xué)習(xí)程序設(shè)計(jì)技術(shù)的初學(xué)者,它能幫助讀者理解使用C++語言進(jìn)行程序設(shè)計(jì)的基本原理并獲得實(shí)踐技巧。本書的目標(biāo)是使你獲得足夠多的知識和經(jīng)驗(yàn),以便能使用最新、最好的技術(shù)進(jìn)行簡單有用的編程工作。達(dá)到這一目標(biāo)需要多長時(shí)間呢?作為大學(xué)一年級課程的一部分,你可以在一個(gè)學(xué)期內(nèi)完成這本書的學(xué)習(xí)(假定你有另外四門中等難度的課程)。如果你是自學(xué)的話,不要期望能花費(fèi)更少的時(shí)間完成學(xué)習(xí)(一般來說,每周15個(gè)小時(shí),14周是合適的學(xué)時(shí)安排)。
三個(gè)月可能看起來是一段很長的時(shí)間,但要學(xué)習(xí)的內(nèi)容很多。寫第一個(gè)簡單程序之前,就要花費(fèi)大約一個(gè)小時(shí)。而且,所有學(xué)習(xí)過程都是漸進(jìn)的:每一章都會(huì)介紹一些新的有用的概念,并通過真實(shí)應(yīng)用中的例子來闡述這些概念。隨著學(xué)習(xí)進(jìn)程的推進(jìn),你通過程序代碼表達(dá)思想的能力——讓計(jì)算機(jī)按你的期望工作的能力,會(huì)逐漸穩(wěn)步地提高。我絕不會(huì)說:“先學(xué)習(xí)一個(gè)月的理論知識,然后看看你是否能使用這些理論吧。”
為什么要學(xué)習(xí)程序設(shè)計(jì)呢?因?yàn)槲覀兊奈拿魇墙⒃谲浖系摹H绻焕斫廛浖,那么你將退化到只能相信“魔術(shù)”的境地,并且將被排除在很多最為有趣、最具經(jīng)濟(jì)效益和社會(huì)效益的領(lǐng)域之外。當(dāng)我談?wù)摮绦蛟O(shè)計(jì)時(shí),我所想到的是整個(gè)計(jì)算機(jī)程序家族,從帶有GUI(圖形用戶界面)的個(gè)人計(jì)算機(jī)程序,到工程計(jì)算和嵌入式系統(tǒng)控制程序(如數(shù)碼相機(jī)、汽車和手機(jī)中的程序),以及文字處理程序等,在很多日常應(yīng)用和商業(yè)應(yīng)用中都能看到這些程序。程序設(shè)計(jì)與數(shù)學(xué)有些相似,認(rèn)真去做的話,會(huì)是一種非常有用的智力訓(xùn)練,可以提高我們的思考能力。然而,由于計(jì)算機(jī)能做出反饋,程序設(shè)計(jì)不像大多數(shù)數(shù)學(xué)形式那么抽象,因而對多數(shù)人來說更易接受。可以說,程序設(shè)計(jì)是一條能夠打開你的眼界,將世界變得更美好的途徑。最后,程序設(shè)計(jì)可以是非常有趣的。
為什么學(xué)習(xí)C++這門程序設(shè)計(jì)語言呢?學(xué)習(xí)程序設(shè)計(jì)是不可能不借助一門程序設(shè)計(jì)語言的,而C++直接支持現(xiàn)實(shí)世界中的軟件所使用的那些關(guān)鍵概念和技術(shù)。C++是使用最為廣泛的程序設(shè)計(jì)語言之一,其應(yīng)用領(lǐng)域幾乎沒有局限。從大洋深處到火星表面,到處都能發(fā)現(xiàn)C++程序的身影。C++是由一個(gè)開放的國際標(biāo)準(zhǔn)組織全面考量、精心設(shè)計(jì)的。在任何一種計(jì)算機(jī)平臺上都能找到高質(zhì)量的、免費(fèi)的C++實(shí)現(xiàn)。而且,用C++所學(xué)到的程序設(shè)計(jì)思想,大多數(shù)可直接用于其他程序設(shè)計(jì)語言,如C、C#、Fortran以及Java。最后一個(gè)原因,我喜歡C++適合編寫優(yōu)美、高效的代碼這一特點(diǎn)。
本書不是初學(xué)程序設(shè)計(jì)的最簡單入門教材,我寫此書的用意也不在此。我為本書設(shè)定的目標(biāo)是——這是一本能讓你學(xué)到基本的實(shí)用編程技術(shù)的最簡單書籍。這是一個(gè)非常雄心勃勃的目標(biāo),因?yàn)楹芏喱F(xiàn)代軟件所依賴的技術(shù),不過才出現(xiàn)短短幾年時(shí)間而已。
我的基本假設(shè)是:你希望編寫供他人使用的程序,并愿意認(rèn)真負(fù)責(zé)地以較高質(zhì)量完成這個(gè)工作,也就是說,假定你希望達(dá)到專業(yè)水準(zhǔn)。因此,我為本書選擇的主題覆蓋了開始學(xué)習(xí)實(shí)用編程技術(shù)所需要的內(nèi)容,而不只是那些容易講授和容易學(xué)習(xí)的內(nèi)容。如果某種技術(shù)是你做好基本編程工作所需要的,那么本書就會(huì)介紹它,同時(shí)展示用以支持這種技術(shù)的編程思想和語言工具,并提供相應(yīng)的練習(xí),期望你通過做這些練習(xí)來熟悉這種技術(shù)。但如果你只想了解“玩具程序”,那么你能學(xué)到的將遠(yuǎn)比我所提供的少得多。另一方面,我不會(huì)用一些實(shí)用性很低的內(nèi)容來浪費(fèi)你的時(shí)間,本書介紹的內(nèi)容都是你在實(shí)踐中幾乎肯定會(huì)用到的。
如果你只是希望直接使用別人編寫的程序,而不想了解其內(nèi)部原理,也不想親自向代碼中加入重要的內(nèi)容,那么本書不適合你,采用另一本書或另一種程序設(shè)計(jì)語言會(huì)更好些。如果這大概就是你對程序設(shè)計(jì)的看法,那么請同時(shí)考慮一下你從何得來的這種觀點(diǎn),它真的滿足你的需求嗎?人們常常低估程序設(shè)計(jì)的復(fù)雜程度和它的重要性。我不愿看到,你不喜歡程序設(shè)計(jì)是因?yàn)槟愕男枨笈c我所描述的軟件世界之間不匹配而造成的。信息技術(shù)世界中有很多地方是不要求程序設(shè)計(jì)知識的。本書面向的是那些確實(shí)希望編寫和理解復(fù)雜計(jì)算機(jī)程序的人。
考慮到本書的結(jié)構(gòu)和注重實(shí)踐的特點(diǎn),它也可以作為學(xué)習(xí)程序設(shè)計(jì)的第二本書,適合那些已經(jīng)了解一點(diǎn)C++的人,以及那些會(huì)用其他語言編程而現(xiàn)在想學(xué)習(xí)C++的人。如果你屬于其中一類,我不好估計(jì)你學(xué)習(xí)這本書要花費(fèi)多長時(shí)間。但我可以給你的建議是,多做練習(xí)。因?yàn)槟阍趯W(xué)習(xí)中常見的一個(gè)問題是習(xí)慣用熟悉的、舊的方式編寫程序,而不是在適當(dāng)?shù)牡胤讲捎眯录夹g(shù),多做練習(xí)會(huì)幫助你克服這個(gè)問題。如果你曾經(jīng)按某種更為傳統(tǒng)的方式學(xué)習(xí)過C++,那么在進(jìn)行到第7章之前,你會(huì)發(fā)現(xiàn)一些令你驚奇的、有用的內(nèi)容。除非你的名字是Stroustrup,否則你會(huì)發(fā)現(xiàn)我在本書中所討論的內(nèi)容不是“你父輩的C++”。
學(xué)習(xí)程序設(shè)計(jì)要靠編程實(shí)踐。在這一點(diǎn)上,程序設(shè)計(jì)與其他需要實(shí)踐學(xué)習(xí)的技藝是相似的。你不可能僅僅通過讀書就學(xué)會(huì)游泳、演奏樂器或者開車,必須進(jìn)行實(shí)踐。同樣,你也不可能不讀寫大量代碼就學(xué)會(huì)程序設(shè)計(jì)。本書給出了大量代碼實(shí)例,都配有說明文字和圖表。你需要通過讀這些代碼來理解程序設(shè)計(jì)的思想、概念和原理,并掌握用來表達(dá)這些思想、概念和原理的程序設(shè)計(jì)語言的特性。但有一點(diǎn)很重要,僅僅讀代碼是學(xué)不會(huì)編程實(shí)踐技巧的。為此,你必須進(jìn)行編程練習(xí),通過編程工具熟悉編寫、編譯和運(yùn)行程序。你需要親身體驗(yàn)編程中會(huì)出現(xiàn)的錯(cuò)誤,學(xué)習(xí)如何修改它們?傊,在學(xué)習(xí)程序設(shè)計(jì)的過程中,編寫代碼的練習(xí)是不可替代的。而且,這也是樂趣所在!
另一方面,程序設(shè)計(jì)遠(yuǎn)非遵循一些語法規(guī)則和閱讀手冊那么簡單。本書的重點(diǎn)不在于C++的語法,而在于理解基礎(chǔ)思想、原理和技術(shù),這是一名好程序員所必備的。只有設(shè)計(jì)良好的代碼才有機(jī)會(huì)成為一個(gè)正確、可靠和易維護(hù)的系統(tǒng)的一部分。而且,“基礎(chǔ)”意味著延續(xù)性:當(dāng)現(xiàn)在的程序設(shè)計(jì)語言和工具演變甚至被取代后,這些基礎(chǔ)知識仍會(huì)保持其重要性。
那么計(jì)算機(jī)科學(xué)、軟件工程、信息技術(shù)等又如何呢?它們都屬于程序設(shè)計(jì)范疇嗎?當(dāng)然不是!但程序設(shè)計(jì)是一門基礎(chǔ)性的學(xué)科,是所有計(jì)算機(jī)相關(guān)領(lǐng)域的基礎(chǔ),在計(jì)算機(jī)科學(xué)領(lǐng)域占有重要的地位。本書對算法、數(shù)據(jù)結(jié)構(gòu)、用戶接口、數(shù)據(jù)處理和軟件工程等領(lǐng)域的重要概念和技術(shù)進(jìn)行了簡要介紹,但本書不能替代對這些領(lǐng)域的全面、均衡的學(xué)習(xí)。
代碼可以很有用,同樣可以很優(yōu)美。本書會(huì)幫你了解這一點(diǎn),同時(shí)理解優(yōu)美的代碼意味著什么,并幫你掌握構(gòu)造優(yōu)美代碼的原理和實(shí)踐技巧。祝你學(xué)習(xí)程序設(shè)計(jì)順利!
致學(xué)生到目前為止,我在德州農(nóng)工大學(xué)已經(jīng)用本書教過幾千名大一新生,其中60%曾經(jīng)有過編程經(jīng)歷,而剩余40%從未見過哪怕一行代碼。大多數(shù)學(xué)生的學(xué)習(xí)是成功的,所以你也可以成功。
你不一定是在某門課程中學(xué)習(xí)本書,本書也廣泛用于自學(xué)。然而,不管你學(xué)習(xí)本書是作為課程的一部分還是自學(xué),都要盡量與他人協(xié)作。程序設(shè)計(jì)有一個(gè)不好的名聲——它是一種個(gè)人活動(dòng),這是不公正的。大多數(shù)人在作為一個(gè)有共同目標(biāo)的團(tuán)體的一份子時(shí),工作效果更好,學(xué)習(xí)得更快。與朋友一起學(xué)習(xí)和討論問題不是“作弊”,而是取得進(jìn)步最有效同時(shí)也是最快樂的途徑。如果沒有特殊情況的話,與朋友一起工作會(huì)促使你表達(dá)出自己的思想,這正是測試你對問題理解和確認(rèn)你的記憶的最有效方法。你沒有必要獨(dú)自解決所有編程語言和編程環(huán)境上的難題。但是,請不要自欺欺人——不去完成那些簡單練習(xí)和大量的習(xí)題(即使沒有老師督促你,你也不應(yīng)這樣做)。記。撼绦蛟O(shè)計(jì)(尤其)是一種實(shí)踐技能,需要通過實(shí)踐來掌握。如果你不編寫代碼(完成每章的若干習(xí)題),那么閱讀本書就純粹是一種無意義的理論學(xué)習(xí)。
大多數(shù)學(xué)生,特別是那些愛思考的好學(xué)生,有時(shí)會(huì)對自己努力工作是否值得產(chǎn)生疑問。當(dāng)你產(chǎn)生這樣的疑問時(shí),休息一會(huì)兒,重新讀一下前言,讀一下第1章和第22章。在那里,我試圖闡述我在程序設(shè)計(jì)中發(fā)現(xiàn)了哪些令人興奮的東西,以及為什么我認(rèn)為程序設(shè)計(jì)是能為世界帶來積極貢獻(xiàn)的重要工具。如果你對我的教學(xué)哲學(xué)和一般方法有疑問,請閱讀引言。
你可能會(huì)對本書的厚度感到擔(dān)心。本書如此之厚的一部分原因是,我寧愿反復(fù)重復(fù)一些解釋說明或增加一些實(shí)例,而不是讓你自己到處找這些內(nèi)容,這應(yīng)該令你安心。另外一個(gè)主要原因是,本書的后半部分是一些參考資料和補(bǔ)充資料,供你想要深入了解程序設(shè)計(jì)的某個(gè)特定領(lǐng)域(如嵌入式系統(tǒng)程序設(shè)計(jì)、文本分析或數(shù)值計(jì)算)時(shí)查閱。
還有,學(xué)習(xí)中請耐心些。學(xué)習(xí)任何一種重要的、有價(jià)值的新技能都要花費(fèi)一些時(shí)間,而這是值得的。
致教師本書不是傳統(tǒng)的計(jì)算機(jī)科學(xué)導(dǎo)論書籍,而是一本關(guān)于如何構(gòu)造能實(shí)際工作的軟件的書。因此本書省略了很多計(jì)算機(jī)科學(xué)系學(xué)生按慣例要學(xué)習(xí)的內(nèi)容(圖靈完全、狀態(tài)機(jī)、離散數(shù)學(xué)、喬姆斯基文法等)。硬件相關(guān)的內(nèi)容也省略了,因?yàn)槲壹俣▽W(xué)生從幼兒園開始就已經(jīng)通過不同途徑使用過計(jì)算機(jī)了。本書也不準(zhǔn)備涉及一些計(jì)算機(jī)科學(xué)領(lǐng)域最重要的主題。本書是關(guān)于程序設(shè)計(jì)的(或者更一般地說,是關(guān)于如何開發(fā)軟件的),因此關(guān)注的是少量主題的更深入的細(xì)節(jié),而不是像傳統(tǒng)計(jì)算機(jī)課程那樣討論很多主題。本書只試圖做好一件事,而且計(jì)算機(jī)科學(xué)也不是一門課程可以囊括的。如果本書被計(jì)算機(jī)科學(xué)、計(jì)算機(jī)工程、電子工程(我們最早的很多學(xué)生都是電子工程專業(yè)的)、信息科學(xué)或者其他相關(guān)專業(yè)所采用,我希望這門課程能和其他一些課程一起進(jìn)行,共同形成對計(jì)算機(jī)科學(xué)的完整介紹。
請閱讀引言,那里有對我的教學(xué)哲學(xué)、一般方法等的介紹。請?jiān)诮虒W(xué)過程中嘗試將這些觀點(diǎn)傳達(dá)給你的學(xué)生。
ISO標(biāo)準(zhǔn)C++C++由一個(gè)ISO標(biāo)準(zhǔn)定義。第一個(gè)ISO C++標(biāo)準(zhǔn)于1998年獲得批準(zhǔn),所以那個(gè)版本的C++被稱為C++98。寫本書第1版時(shí),我正從事C++11的設(shè)計(jì)工作。
……
作者簡介Programming: Principles and Practice Using C++, Second Edition你也許有理由問:“是一些什么人想要教我程序設(shè)計(jì)?”那么,下面給出作者的一些生平信息。Bjarne Stroustrup和Lawrence“Pete”Petersen合著了本書。Stroustrup還設(shè)計(jì)并講授了面向大學(xué)一年級學(xué)生的課程,這門課程是與本書同步發(fā)展起來的,以本書的初稿作為教材。
Bjarne Stroustrup我是C++語言的設(shè)計(jì)者和初的實(shí)現(xiàn)者。在過去大約40年間,我使用C++和許多其他程序設(shè)計(jì)語言進(jìn)行過各種各樣的編程工作。我喜歡那些用在富有挑戰(zhàn)性的應(yīng)用(如機(jī)器人控制、繪圖、游戲、文本分析以及網(wǎng)絡(luò)應(yīng)用)中的優(yōu)美而又高效的代碼。我教過能力和興趣各異的人設(shè)計(jì)、編程和C++語言。我是ISO標(biāo)準(zhǔn)組織C++委員會(huì)的創(chuàng)建者,現(xiàn)在是該委員會(huì)語言演化工作組的主席。
這是我本入門性的書。我編著的其他書籍如《The C++ Pro-gramming Language》和《The Design and Evolution of C++》都是面向有經(jīng)驗(yàn)的程序員的。
我生于丹麥奧爾胡斯一個(gè)藍(lán)領(lǐng)(工人階級)家庭,在家鄉(xiāng)的大學(xué)獲得了數(shù)學(xué)與計(jì)算機(jī)科學(xué)碩士學(xué)位。我的計(jì)算機(jī)科學(xué)博士學(xué)位是在英國劍橋大學(xué)獲得的。我為AT&T工作了大約25年,初在著名的貝爾實(shí)驗(yàn)室的計(jì)算機(jī)科學(xué)研究中心——Unix、C、C++及其他很多東西的發(fā)明地,后來在AT&T實(shí)驗(yàn)室研究中心。
我現(xiàn)在是美國國家工程院的院士,ACM會(huì)士(Fellow)和IEEE會(huì)士。我獲得了2005年度Sigma Xi(科學(xué)研究協(xié)會(huì))的科學(xué)成就William Procter獎(jiǎng),我是首位獲得此獎(jiǎng)的計(jì)算機(jī)科學(xué)家。2010年,我獲得了丹麥奧爾胡斯大學(xué)古老也富聲望的獎(jiǎng)項(xiàng)Rigmor og Carl Holst-Knudsens Videnskapspris,該獎(jiǎng)項(xiàng)頒發(fā)給為科學(xué)做出貢獻(xiàn)的與該校有關(guān)的人士。2013年,我被位于俄羅斯圣彼得堡的信息技術(shù)、力學(xué)和光學(xué)(ITMO)國立研究大學(xué)授予計(jì)算機(jī)科學(xué)榮譽(yù)博士學(xué)位。
至于工作之外的生活,我已婚,有兩個(gè)孩子,一個(gè)是醫(yī)學(xué)博士,另一個(gè)在進(jìn)行博士后研究。我喜歡閱讀(包括歷史、科幻、犯罪及時(shí)事等各類書籍),還喜歡各種音樂(包括古典音樂、搖滾、藍(lán)調(diào)和鄉(xiāng)村音樂)。和朋友一起享受美食是我生活中必不可少的一部分,我還喜歡參觀世界各地有趣的地方。為了能夠享受美食,我還堅(jiān)持跑步。
關(guān)于我的更多信息,請見我的網(wǎng)站www.stroustrup.com。特別是,你可以在那里找到我名字的正確發(fā)音。
Lawrence“Pete”Petersen2006年年末,Pete如此介紹他自己:“我是一名教師。近20年來,我一直在德州農(nóng)工大學(xué)講授程序設(shè)計(jì)語言。我已5次被學(xué)生選為優(yōu)秀教師,并于1996年被工程學(xué)院的校友會(huì)選為杰出教師。我是Wakonse優(yōu)秀教師計(jì)劃的委員和教師發(fā)展研究院院士。
作為一名陸軍軍官的兒子,我的童年是在不斷遷移中度過的。在華盛頓大學(xué)獲得哲學(xué)學(xué)位后,我作為野戰(zhàn)炮兵官員和操作測試研究分析員在軍隊(duì)服役了22年。1971年至1973年期間,我在俄克拉荷馬希爾堡講授野戰(zhàn)炮兵軍官的高級課程。1979年,我?guī)椭鷦?chuàng)建了測試軍官的訓(xùn)練課程,并在1978年至1981年及1985年至1989年期間在跨越美國的九個(gè)不同地方以首席教官的身份講授這門課程。
1991年我組建了一個(gè)小型的軟件公司,生產(chǎn)供大學(xué)院系使用的管理軟件,直至1999年。我的興趣在于講授、設(shè)計(jì)和實(shí)現(xiàn)供人們使用的實(shí)用軟件。我在喬治亞理工大學(xué)獲得了工業(yè)管理學(xué)碩士學(xué)位,在德州農(nóng)工大學(xué)獲得了教育管理學(xué)碩士學(xué)位。我還從NTS獲得了微型計(jì)算機(jī)碩士學(xué)位。我在德州農(nóng)工大學(xué)獲得了信息與運(yùn)營管理學(xué)博士學(xué)位。
我和我的妻子Barbara都生于德州的布萊恩。我們喜歡旅行、園藝和招待朋友;我們花盡可能多的時(shí)間陪我們的兒子和他們的家庭,特別是我們的孫子和孫女Angelina、Carlos、Tess、Avery、Nicholas和Jordan!
令人悲傷的是,Pete于2007年死于肺癌。如果沒有他,這門課程絕對不會(huì)取得成功。
目 錄
Programming: Principles and Practice Using C++, Second Edition
出版者的話
譯者序
前言
引言
作者簡介
第15章 容器和迭代器 1
15.1 存儲(chǔ)和處理數(shù)據(jù) 1
15.1.1 處理數(shù)據(jù) 1
15.1.2 泛化代碼 2
15.2 STL理念 4
15.3 序列和迭代器 7
15.3.1 回到實(shí)例 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 實(shí)例:一個(gè)簡單的文本編輯器 16
15.6.1 處理行 18
15.6.2 遍歷 18
15.7 vector、list和string 21
15.7.1 insert和erase 22
15.8 調(diào)整vector類達(dá)到STL版本的功能 24
15.9 調(diào)整內(nèi)置數(shù)組達(dá)到STL版本的功能 26
15.10 容器概覽 27
15.10.1 迭代器類別 28
簡單練習(xí) 29
思考題 30
術(shù)語 30
習(xí)題 31
附言 32
第16章 算法和映射 33
16.1 標(biāo)準(zhǔn)庫算法 33
16.2 最簡單的算法f?ind() 34
16.2.1 一些一般的應(yīng)用 35
16.3 通用搜索算法f?ind_if() 36
16.4 函數(shù)對象 38
16.4.1 函數(shù)對象的抽象視圖 39
16.4.2 類成員上的斷言 39
16.4.3 lambda表達(dá)式 40
16.5 數(shù)值算法 41
16.5.1 累積 42
16.5.2 泛化accumulate() 43
16.5.3 內(nèi)積 44
16.5.4 泛化inner_product() 45
16.6 關(guān)聯(lián)容器 45
16.6.1 map 46
16.6.2 map概覽 47
16.6.3 另一個(gè)map實(shí)例 50
16.6.4 unordered_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
簡單練習(xí) 60
思考題 61
術(shù)語 62
習(xí)題 62
附言 63
第17章 一個(gè)顯示模型 64
17.1 為什么要使用圖形 64
17.2 一個(gè)基本顯示模型 65
17.3 第一個(gè)例子 66
17.4 使用GUI庫 68
17.5 坐標(biāo)系 69
17.6 Shape 70
17.7 使用Shape類 70
17.7.1 圖形頭文件和主函數(shù) 70
17.7.2 一個(gè)幾乎空白的窗口 71
17.7.3 坐標(biāo)軸 73
17.7.4 繪制函數(shù)圖 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 更多未討論的內(nèi)容 81
17.8 讓圖形程序運(yùn)行起來 81
17.8.1 源文件 82
簡單練習(xí) 83
思考題 83
術(shù)語 83
習(xí)題 84
附言 84
第18章 圖形類 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
簡單練習(xí) 114
思考題 115
術(shù)語 115
習(xí)題 116
附言 116
第19章 設(shè)計(jì)圖形類 117
19.1 設(shè)計(jì)原則 117
19.1.1 類型 117
19.1.2 操作 118
19.1.3 命名 119
19.1.4 可變性 120
19.2 Shape 121
19.2.1 一個(gè)抽象類 122
19.2.2 訪問控制 123
19.2.3 繪制形狀 125
19.2.4 拷貝和可變性 127
19.3 基類和派生類 128
19.3.1 對象布局 130
19.3.2 類的派生和虛函數(shù)的定義 131
19.3.3 覆蓋 131
19.3.4 訪問 133
19.3.5 純虛函數(shù) 134
19.4 面向?qū)ο蟪绦蛟O(shè)計(jì)的好處 135
簡單練習(xí) 136
思考題 136
術(shù)語 137
習(xí)題 137
附言 138
第20章 繪制函數(shù)圖和數(shù)據(jù)圖 139
20.1 簡介 139
20.2 繪制簡單函數(shù)圖 139
20.3 Function 143
20.3.1 默認(rèn)參數(shù) 143
20.3.2 更多例子 144
20.3.3 lambda表達(dá)式 146
20.4 Axis 146
20.5 近似 148
20.6 繪制數(shù)據(jù)圖 152
20.6.1 讀取文件 153
20.6.2 一般布局 154
20.6.3 數(shù)據(jù)比例 155
20.6.4 構(gòu)造數(shù)據(jù)圖 156
簡單練習(xí) 158
思考題 159
術(shù)語 159
習(xí)題 159
附言 160
第21章 圖形用戶界面 161
21.1 用戶界面的選擇 161
21.2 “Next”按鈕 162
21.3 一個(gè)簡單的窗口 163
21.3.1 回調(diào)函數(shù) 164
21.3.2 等待循環(huán) 166
21.3.3 lambda表達(dá)式作為回調(diào)函數(shù) 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 一個(gè)實(shí)例 170
21.6 控制流反轉(zhuǎn) 173
21.7 添加菜單 174
21.8 調(diào)試GUI代碼 178
簡單練習(xí) 179
思考題 179
術(shù)語 180
習(xí)題 180
附言 181
第22章 理念和歷史 182
22.1 歷史、理念和專業(yè)水平 182
22.1.1 程序設(shè)計(jì)語言的目標(biāo)和哲學(xué) 182
22.1.2 編程理念 183
22.1.3 風(fēng)格/范型 188
22.2 程序設(shè)計(jì)語言歷史概覽 190
22.2.1 最早的程序設(shè)計(jì)語言 191
22.2.2 現(xiàn)代程序設(shè)計(jì)語言的起源 193
22.2.3 Algol家族 197
22.2.4 Simula 203
22.2.5 C 204
22.2.6 C++ 207
22.2.7 今天 209
22.2.8 參考資料 210
思考題 211
你還可能感興趣
我要評論
|