STL擴(kuò)展技術(shù)手冊(cè)卷I

出版時(shí)間:2008-9  出版社:機(jī)械工業(yè)出版社  作者:Matthew Wilson  頁(yè)數(shù):414  
Tag標(biāo)簽:無(wú)  

前言

  難道每門(mén)語(yǔ)言都難免日趨復(fù)雜,并最終絆倒在復(fù)雜性的門(mén)檻上嗎?  —AdamConnor  難用的話,少用就是了?!  狹elanieKrug  事物的兩面性  3年前,《ImperfectC++》快要完工時(shí),我跟編輯說(shuō)起這本《ExtendedSTL》,當(dāng)時(shí)我信心滿滿地聲稱它會(huì)是一本易讀易懂。且輕薄短小得可以輕松從兩個(gè)抽象層之間滑過(guò)的小冊(cè)子。此外我還保證會(huì)在半年之內(nèi)寫(xiě)完。結(jié)果呢?在寫(xiě)這篇序言的時(shí)候,離當(dāng)初約好的截稿日期已經(jīng)過(guò)去了一年半有余,而且,本來(lái)計(jì)劃好的一本薄薄的。約十六至二十個(gè)章節(jié)的小冊(cè)子現(xiàn)在也膨脹成了兩卷本,其中第一卷洋洋灑灑四十三個(gè)章節(jié)(含“插曲”章節(jié)),哦,對(duì)了,CD上還有三章呢…但話說(shuō)回來(lái),當(dāng)初有一個(gè)保證現(xiàn)在仍然可以說(shuō)是成立的,那就是這是一本對(duì)任何有一定C++經(jīng)驗(yàn)的讀者來(lái)說(shuō)都輕松易懂的書(shū)?! 槭裁催@本書(shū)后來(lái)的情況遠(yuǎn)遠(yuǎn)超出我當(dāng)初的預(yù)計(jì)呢?并不是因?yàn)槲沂擒浖こ處煛蠹叶贾儡浖こ處煿烙?jì)的工作量,乘三之后才是實(shí)際需要的時(shí)間。而是因?yàn)椋ㄎ艺J(rèn)為)以下四個(gè)重要的原因:  1。STL并不直觀,花費(fèi)可觀的智力投資后方能熟練運(yùn)用。  2。沒(méi)錯(cuò),STL在技術(shù)上功臻化境,沒(méi)錯(cuò),STL在內(nèi)聚性方面超凡入圣。然而,STL前瞻性不夠,對(duì)于在它那有限的概念定義之外的抽象,它并不能妥善應(yīng)付?! ?。C++語(yǔ)言本身是不完美的?! ?。C++是一門(mén)難學(xué)的語(yǔ)言,但你得到的回報(bào)是效率,而且同時(shí)又并沒(méi)有犧牲設(shè)計(jì)?! ∽罱鼛啄闏++與時(shí)俱進(jìn),這一方面意味著C++變得非常強(qiáng)大,但另一方面也暴露出了其晦澀難懂的一面。如果你試著編寫(xiě)一個(gè)具有一定規(guī)模并用到模板元編程的模板庫(kù),那么一種可能是你將學(xué)到許多東西,并掌握了一個(gè)強(qiáng)大的工具,但同樣也很可能的是你編寫(xiě)出的那堆東西除了C++狂熱信徒之外誰(shuí)也無(wú)法理解?! ++的使用精神本來(lái)就是擴(kuò)展。除了很有限的一些應(yīng)用是將C++看作“更好的C”來(lái)使用的之外,絕大多數(shù)C++使用都是圍繞著類(lèi)型定義(類(lèi)。枚舉。結(jié)構(gòu)。聯(lián)合)來(lái)進(jìn)行的,而且這些自定義類(lèi)型很大程度上被做成與內(nèi)建類(lèi)型界面一致。也正因?yàn)檫@個(gè)原因,C++中的許多內(nèi)建操作符都是允許重載的。這樣,一個(gè)vector,比如說(shuō),便可以重載operator[]來(lái)模擬內(nèi)建數(shù)組的界面,再舉個(gè)例子:任何可被拷貝(Copyable)的類(lèi)型(一般)都定義(重載)了拷貝賦值操作符(operator=)。如此等等,不一而足。但由于C++的不完美。強(qiáng)大。以及極強(qiáng)的可擴(kuò)展性,伴隨而來(lái)的便是JoelSpolsky所說(shuō)的抽象滲漏法則(theLawofLeakyAbstractions):“所有非平凡的抽象在某種程度上都是有漏洞的。”簡(jiǎn)單來(lái)說(shuō)這句話就意味著要想順利使用非平凡的抽象就必須對(duì)抽象下面的東西有所了解。  這也正是許多C++開(kāi)發(fā)者重新發(fā)明輪子的原因之一。其實(shí)這里的原因并不僅僅是眾所周知的所謂“非我發(fā)明癥”(NIH),而是因?yàn)槲覀兂30l(fā)現(xiàn)自己所用的第三方組件除了百分之八十的功能是自己能理解并使用的之外,剩下的百分之二十往往裹著一團(tuán)晦澀的黑氣,造成后者的原因很多:復(fù)雜性。與既有概念或慣用法的不一致。低效。效率。范圍局限性。設(shè)計(jì)或?qū)崿F(xiàn)的不優(yōu)雅。糟糕的編碼風(fēng)格等等。而且,編譯技術(shù)現(xiàn)階段的一些實(shí)際問(wèn)題還會(huì)極大地加劇這種情況,尤其是遇到模板實(shí)例化過(guò)程中的錯(cuò)誤消息時(shí)?! ∥矣X(jué)得我之所以有資格寫(xiě)這本書(shū),原因之一就是我花了大量的時(shí)間來(lái)研究并實(shí)現(xiàn)STL相關(guān)的庫(kù),而不是接受C++標(biāo)準(zhǔn)(1998)所指定的庫(kù)或其他人寫(xiě)的庫(kù)。而我決定寫(xiě)這本書(shū)的原因之一則是想將我在以上過(guò)程中學(xué)到的東西總結(jié)出來(lái)。如果你想要編寫(xiě)STL擴(kuò)展,這本書(shū)可以為你提供幫助,而就算你只是想使用其他人寫(xiě)的STL擴(kuò)展,這本書(shū)也同樣有用,因?yàn)槌橄鬂B漏法則決定了你很可能會(huì)不時(shí)需要掀開(kāi)抽象這塊幕布往里面瞧一瞧?! NIX編程的原則  在《UNIX程序設(shè)計(jì)藝術(shù)》(Addison-Wesley,2004)中,EricRaymond總結(jié)了UNIX社群的最佳實(shí)踐準(zhǔn)則,這些準(zhǔn)則來(lái)自大量不同的經(jīng)驗(yàn)。在我們改裝STL的宏大計(jì)劃中,這些準(zhǔn)則就像標(biāo)燈一樣為我們指明方向:  ·清晰原則:清晰比巧妙重要?!  そM合原則:設(shè)計(jì)能夠互相連接的組件。  ·多樣性原則:質(zhì)疑任何被聲稱為“真正唯一”的途徑?!  そ?jīng)濟(jì)原則:程序員時(shí)間是昂貴的,在它跟機(jī)器時(shí)間之間,優(yōu)先節(jié)省前者?!  た蓴U(kuò)展性原則:在未來(lái)時(shí)態(tài)下設(shè)計(jì),因?yàn)槲磥?lái)比你想像得來(lái)得更快?!  ど稍瓌t:避免手動(dòng)編碼,可以的話,編寫(xiě)程序來(lái)生成程序?!  ぷ钚∫馔庠瓌t:在接口設(shè)計(jì)中作出的決策應(yīng)該始終是那個(gè)令人最少感到意外的選擇?!  つK性原則:編寫(xiě)簡(jiǎn)單的模塊,模塊與模塊間通過(guò)干凈的接口連接?!  ぷ畲笠馔庠瓌t:如果免不了要失敗的話,要弄出最大動(dòng)靜,而且失敗得越早越好。  ·優(yōu)化原則:首先要能工作,然后才能談得上優(yōu)化?!  rincipleofParsimony:Writelargecomponentsonlywhenitisclearbydemonstrationthatnothingelsewilldo?!  ち邌菰瓌t:除非能夠明確證明別無(wú)它法,否則不要編寫(xiě)大的組件?!  そ研栽瓌t:透明性和簡(jiǎn)單性是健壯性的父母?!  し蛛x原則:策略和機(jī)制分離,接口與引擎分離。  ·簡(jiǎn)單原則:設(shè)計(jì)應(yīng)該是簡(jiǎn)單的,只在必須的時(shí)候才增加或暴露復(fù)雜性?!  ね该髟瓌t:設(shè)計(jì)的時(shí)候應(yīng)考慮透明性,以方便檢查和調(diào)試。

內(nèi)容概要

本書(shū)以STLSoft為基礎(chǔ),廣泛深入地論述了C++標(biāo)準(zhǔn)庫(kù)STL的相關(guān)內(nèi)容。全書(shū)共三部分43章,包括標(biāo)準(zhǔn)庫(kù)模板、擴(kuò)展STL、元素引用類(lèi)別、DRY SPOT原則、抽象泄漏法則、契約式編程、約束、墊片、不完備結(jié)構(gòu)一致性的發(fā)端、資源獲取、模板工具、推斷式接口適配、Henney假說(shuō)、適配、遍歷進(jìn)程和模塊、環(huán)境變量、字符串分詞、聚集分散的I/O以及迭代器等內(nèi)容。    全書(shū)通過(guò)嚴(yán)謹(jǐn)?shù)谋硎雠c豐富的示例,將概念和理論與實(shí)際的設(shè)計(jì)和代碼結(jié)合起來(lái),從而使讀者既能深刻地理解STL的知識(shí),又能熟練地掌握STL運(yùn)用方法。

作者簡(jiǎn)介

Matthew Wilson,Synesis軟件公司的軟件開(kāi)發(fā)顧問(wèn),STLSoft和Pantheios庫(kù)的創(chuàng)建者,《Imperfect C++》(Addison-Wesley)的作者。他曾是《C/C++ Users Journal》(C/C++用戶雜志)的專欄作家,也是一些主要出版物的撰稿者,具有15年以上的C++經(jīng)驗(yàn)。他擁有英國(guó)曼徹斯特大學(xué)

書(shū)籍目錄

譯者序前言  致謝  序言  編排體例  第一部分 基礎(chǔ)   第1章 標(biāo)準(zhǔn)模板庫(kù)   第2章 擴(kuò)展STL:STL與真實(shí)世界的碰撞   第3章 元素引用類(lèi)別   第4章 奇異去臨時(shí)引用   第5章 DRY SPOT原則   第6章 抽象泄漏法則   第7章 契約式編程   第8章 約束   第9章 墊片   第10章 鴨規(guī)則和鵝規(guī)則:不完備結(jié)構(gòu)一致性的發(fā)端   第11章 資源獲取即初始化   第12章 模板工具   第13章 推斷式接口適配:編譯時(shí)適配接口不全的類(lèi)型   第14章 Henney假說(shuō):當(dāng)模板參數(shù)表太長(zhǎng)   第15章 通過(guò)equal()減少友元函數(shù)的使用   第16章 基本組件  第二部分 集合   第17章 適配glob API   第18章 插曲:構(gòu)造函數(shù)沖突以及不良的設(shè)計(jì)   第19章 適配opendir/readdir API   第20章 適配FindFirstFile/FindNextFile API   第21章 插曲:枚舉FTP服務(wù)器目錄——保持效率和可用性的平衡   第22章 遍歷進(jìn)程和模塊   第23章 斐波那契序列   第24章 適配MFC的CArray容器族   第25章 環(huán)境變量的map   第26章 在Z平面上來(lái)回穿梭   第27章 字符串分詞   第28章 適配COM枚舉器   第29章 插曲:運(yùn)用成員類(lèi)型推斷,糾正設(shè)計(jì)上的小疏忽   第30章 適配COM集合   第31章 聚集分散的I/O   第32章 根據(jù)參數(shù)返回不同類(lèi)型   第33章 外部迭代器失效  第三部分 迭代器   第34章 增強(qiáng)版ostream_iterator   第35章 插曲:借助解引用代理模式,消除笨拙的輸出迭代器語(yǔ)法   第36章 變換迭代器   第37章 插曲:命名時(shí)謹(jǐn)慎為好   第38章 成員選取迭代器   第39章 連接C風(fēng)格字符串   第40章 字符串對(duì)象的連接操作   第41章 適配迭代器特征類(lèi)   第42章 過(guò)濾迭代   第43章 組合多個(gè)迭代器適配  結(jié)語(yǔ)  參考書(shū)目

章節(jié)摘錄

  第2章.擴(kuò)展STL:STL與真實(shí)世界的碰撞  好的定律是清楚和簡(jiǎn)單的,并讓使用者在面對(duì)具體問(wèn)題時(shí)應(yīng)對(duì)自如。  -RonMcCallum教授  搞清楚你此刻應(yīng)當(dāng)做什么,然后去做?! ?BillyConnolly  前章涵蓋了STL的要點(diǎn),包括容器、迭代器、算法、函數(shù)對(duì)象、分配器及適配器的核心概念??上U(kuò)展STL時(shí),這些概念不是太抽象就是太粗糙。這一章中我們將針對(duì)本卷中關(guān)于集合及迭代器適配器的材料,進(jìn)一步探討這些概念。  2.1.術(shù)語(yǔ)  雖然標(biāo)準(zhǔn)庫(kù)中包含了許多原STL(Stepanov與同事開(kāi)發(fā)的版本)的內(nèi)容,但卻(還)沒(méi)有全盤(pán)照搬。比方說(shuō)C++03標(biāo)準(zhǔn)目前只定義了基于樹(shù)的關(guān)聯(lián)容器,而沒(méi)有包含原STL中基于hash表的關(guān)聯(lián)容器。盡管已經(jīng)有建議要加入此類(lèi)容器,并且會(huì)在下個(gè)C++標(biāo)準(zhǔn)發(fā)布時(shí)被采納,但眼下的狀況就是標(biāo)準(zhǔn)庫(kù)并非STL的超集?! ×硪环矫?,標(biāo)準(zhǔn)庫(kù)中包含不屬于STL但卻與STL兼容的組件,即IOStreams。當(dāng)把IOStreams看作嚴(yán)肅的I/O程序庫(kù),無(wú)論從哪方面考量,附著其上的STL兼容接口都對(duì)C++有利無(wú)害?! TL與標(biāo)準(zhǔn)庫(kù)有許多重疊的地方,但兩者卻又是不同的。在這一卷中,我不去理會(huì)任何未被標(biāo)準(zhǔn)庫(kù)采納的STL組件,反之亦然。所以,當(dāng)我提到“標(biāo)準(zhǔn)組件”的時(shí)候,我的意思是指那些既在STL庫(kù)又在標(biāo)準(zhǔn)庫(kù)中,且定義與標(biāo)準(zhǔn)庫(kù)定義一致的組件?! ”緯?shū)主要討論的是擴(kuò)展STL的技術(shù),我們還需要一套術(shù)語(yǔ)才能進(jìn)行下去,這些擴(kuò)展不僅是增加新容器而已。事實(shí)上,大部分?jǐn)U展提供的是對(duì)一個(gè)區(qū)間內(nèi)的元素的訪問(wèn)手段,但它們根本不是容器,我稱它們?yōu)镾TL集合。我們?cè)谙乱粋€(gè)小節(jié)中討論集合概念,及其與容器概念的關(guān)系?! ?.2.集合  STL本身只關(guān)注容器。標(biāo)準(zhǔn)把容器定義為“存儲(chǔ)別的對(duì)象,[同時(shí)]對(duì)這些對(duì)象負(fù)有分配及回收的責(zé)任,途徑是對(duì)象的構(gòu)造函數(shù),析構(gòu)函數(shù),插入操作以及刪除操作”(C++-03:23.1;1)。但是有比容器多得多的類(lèi)型屬于對(duì)象集合(圖2.1)。在本書(shū)所有后續(xù)章節(jié),特別是在第二部分中,我將使用在本章中定義的分類(lèi)。

媒體關(guān)注與評(píng)論

  “《Extended STL》不只是一本關(guān)于適應(yīng)STL并用于日常工作的書(shū),它也是一次冒險(xiǎn)旅行,它帶你經(jīng)歷軟件設(shè)計(jì)和概念、C++的強(qiáng)力技術(shù),以及真實(shí)世界軟件開(kāi)發(fā)中的危險(xiǎn),換句話說(shuō),它是一本Matthew Wilson風(fēng)格的書(shū)。如果你對(duì)C++的態(tài)度是嚴(yán)肅認(rèn)真的,我認(rèn)為你應(yīng)該閱讀它?!薄  狟jorn Karlsson,主設(shè)計(jì)師,ReadSoft;〈Beyond the C++ Standard Library: An Introduction to Boost》的作者

編輯推薦

  著名的C++專家MatthewWilson在《STL擴(kuò)展技術(shù)手冊(cè)(卷1):集合和迭代器》中展示了如何超越C++標(biāo)準(zhǔn)并擴(kuò)展標(biāo)準(zhǔn)模板庫(kù)(StandardTemplateLibrary,STL),進(jìn)入包含API和非標(biāo)準(zhǔn)集合的更廣闊的C++世界,以編寫(xiě)更有效、更有表達(dá)力、更靈活、更健壯的軟件?! ≡凇禨TL擴(kuò)展技術(shù)手冊(cè)(卷1):集合和迭代器》中,Wilson使用自己創(chuàng)新的技術(shù)幫助讀者掌握STL擴(kuò)展特性,這體現(xiàn)在兩個(gè)方面:將專用技術(shù)庫(kù)和操作系統(tǒng)API適配為STL兼容的集合,并定義精密的迭代適配器,使STL潛在的效率和表現(xiàn)力得以實(shí)現(xiàn)。Wilson用實(shí)際的例子闡明了幾個(gè)強(qiáng)大的概念和技巧,讓你在連STL的創(chuàng)造者都未曾預(yù)見(jiàn)的方向上擴(kuò)展STL,其中包括集合、元素參考類(lèi)別、外部迭代器失效和推斷式接口適配。  對(duì)于那些對(duì)STL知之甚微的C++程序員,《STL擴(kuò)展技術(shù)手冊(cè)(卷1):集合和迭代器》將是寶貴的資源。

圖書(shū)封面

圖書(shū)標(biāo)簽Tags

無(wú)

評(píng)論、評(píng)分、閱讀與下載


    STL擴(kuò)展技術(shù)手冊(cè)卷I PDF格式下載


用戶評(píng)論 (總計(jì)16條)

 
 

  •   翻譯的不錯(cuò),原文本身質(zhì)量也是非常的高,作者還要寫(xiě)第二卷本,十分期待。要自己擴(kuò)展STL的讀者一定要閱讀本書(shū)!
  •   對(duì)于學(xué)習(xí)STL的原理是一本非常不錯(cuò)的書(shū),是應(yīng)用STL的基礎(chǔ)~~~
  •   不錯(cuò) 比較全面 還附了光盤(pán)
  •   書(shū)挺新的,印刷清晰。不錯(cuò),這本是卷一,不知道卷二到底存不存在?
  •   錢(qián)買(mǎi)的是書(shū),不是知識(shí);閱讀增長(zhǎng)知識(shí),不是能力;實(shí)踐出真知,勤學(xué)更要苦練
  •   是本好書(shū),知識(shí)很全面
  •   經(jīng)典是不用說(shuō)的,大家都知道價(jià)值所在
  •   大師之作,非常好
  •   需要靜下心慢慢看
  •   好書(shū)好書(shū)。
  •   好書(shū),就是有點(diǎn)深?yuàn)W!
  •   書(shū)還不錯(cuò)。不過(guò)一般的初學(xué)者不可能看得懂。呵呵。適合對(duì)STL、Boost有一定了解和使用經(jīng)驗(yàn)的人。
  •   對(duì)實(shí)際應(yīng)用有很好的作用
  •   還不錯(cuò)吧,行文風(fēng)格我很喜歡
  •   內(nèi)容比較難,還牽涉到其他書(shū)的庫(kù),搞得又要放下下去啃imperfect c++。。?;貋?lái)看翻譯還是有點(diǎn)讓人難以忍受
  •   內(nèi)容設(shè)計(jì)還不錯(cuò),但是不值這個(gè)價(jià),感覺(jué)很虧
 

250萬(wàn)本中文圖書(shū)簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書(shū)網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7