資料介紹
導(dǎo)讀
你已經(jīng)熟悉了STL。你知道怎么建立容器,迭代它們的內(nèi)容,添加刪除元素和應(yīng)用常見(jiàn)算法,比如find和sort。但你并不
滿足,你不能擺脫STL所提供的超過(guò)它們能帶來(lái)的好處的感覺(jué)。應(yīng)該簡(jiǎn)單的任務(wù)并非那樣。應(yīng)該直截了當(dāng)?shù)牟僮鞔_有資
源泄漏或錯(cuò)誤行為。應(yīng)該高效的過(guò)程卻需要比你希望給它們的更多的時(shí)間和內(nèi)存。是的,你知道怎么使用STL,但你不
確定你在有效地使用它。
我為你寫了這本書(shū)。
在《Effective STL》中,我解釋了怎樣結(jié)合STL組件來(lái)在庫(kù)的設(shè)計(jì)得到最大的好處。這樣的信息允許你對(duì)簡(jiǎn)單、直接的問(wèn)
題開(kāi)發(fā)簡(jiǎn)單、直接的解決方案,也幫你對(duì)更復(fù)雜的問(wèn)題設(shè)計(jì)優(yōu)雅的方法。我描述了常見(jiàn)的STL使用錯(cuò)誤,而且向你演示
怎么避開(kāi)它們。那幫助你躲開(kāi)閃資源漏、不可移植的代碼和未定義的行為。我討論了優(yōu)化代碼的方法,所以你能使STL
表現(xiàn)得像它應(yīng)該的那樣快速、光滑。
本書(shū)里的信息將使你成為一個(gè)更好的STL程序員,它將讓你成為一個(gè)更高產(chǎn)的程序員。而且它將讓你成為一個(gè)更愉快的
程序員,使用STL很有趣,但是有效地使用它更為有趣,這種有趣是它們必須把你拽離鍵盤,因?yàn)槟悴荒芟嘈拍銧?zhēng)擁有
的好時(shí)光。即使對(duì)STL的匆匆一瞥也能發(fā)現(xiàn)它是一個(gè)非??岬膸?kù),但這份酷比你可能想象的更寬更深。我在本書(shū)的一個(gè)
主要目標(biāo)是傳達(dá)給你這個(gè)庫(kù)有多神奇,因?yàn)樵谖?a target='_blank' class='arckwlink_none'>編程的差不多30年里,我從未見(jiàn)過(guò)任何像STL的東西。你或許也沒(méi)有。
定義、使用和擴(kuò)展STL
沒(méi)有“STL”的官方定義,而且當(dāng)人們使用這個(gè)術(shù)語(yǔ)時(shí),不同的人表示的是不同的東西。在本書(shū)中,“STL”的意思是
與迭代器合作的C++標(biāo)準(zhǔn)庫(kù)的一部分。那包括標(biāo)準(zhǔn)容器(包括string),iostream庫(kù)的一部分,函數(shù)對(duì)象和算法。它不包
括標(biāo)準(zhǔn)容器適配器(stack、queue和priority_queue)以及bitset和valarray容器,因?yàn)樗鼈內(nèi)狈Φ髦С?。它也不包括?shù)
組。真的,數(shù)組以指針的形式支持迭代器,但數(shù)組是C++語(yǔ)言的一部分,并非庫(kù)。
技術(shù)上,我的STL的定義排除了標(biāo)準(zhǔn)C++庫(kù)的擴(kuò)展,特別是散列容器,單鏈表,rope和多種非標(biāo)準(zhǔn)函數(shù)對(duì)象。雖然如
此,一個(gè)有效的STL程序員需要知道這樣的擴(kuò)展,因此我在合適的地方提到了它們。的確,條款25致力于非標(biāo)準(zhǔn)散列容
器的概述。它們現(xiàn)在不在STL里,但類似它們的東西幾乎肯定將要進(jìn)入標(biāo)準(zhǔn)C++庫(kù)的下一個(gè)版本,而在窺見(jiàn)未來(lái)是有價(jià)
值的。
存在STL擴(kuò)展的原因之一是STL是被設(shè)計(jì)為可擴(kuò)展的庫(kù)。不過(guò),在本書(shū)里,我關(guān)注于使用STL,而不是給它添加新的組
件。例如,如果你發(fā)現(xiàn),我沒(méi)有說(shuō)多少關(guān)于寫你自己的算法的東西,而且我根本沒(méi)有在寫新容器和迭代器上提供指導(dǎo)。
我相信在你著手增加它的能力之前,掌握STL已經(jīng)提供的東西很重要,所以那是我在《Effective STL》里關(guān)注的。當(dāng)你決
定建立你自己STLesque組件時(shí),你將在像Josuttis的《The C++ Standard Library》[3]和Austern的《Generic Programming and
the STL》[4]這樣的書(shū)里找到建議。我確實(shí)在這本書(shū)里討論的STL擴(kuò)展的一個(gè)方面是寫你自己的函數(shù)對(duì)象。你不可能在不
知道怎么寫自己的函數(shù)對(duì)象的情況下有效地使用STL,所以我為這個(gè)主題投入了整整一章(第6章)。
STL和標(biāo)準(zhǔn)
我經(jīng)常提及C++標(biāo)準(zhǔn),因?yàn)椤禘ffective STL》專注于可移植的,與標(biāo)準(zhǔn)一致的C++。理論上,我在這本書(shū)里演示的一切都
可以用于每個(gè)C++實(shí)現(xiàn)。實(shí)際上,那不是真的。編譯器的缺陷和STL實(shí)現(xiàn)湊合成防止一些有效的代碼編譯或表現(xiàn)出它們
應(yīng)該有的行為。那是很常見(jiàn)的情況,我描述了這些問(wèn)題,而且解釋了你應(yīng)該怎么變通地解決他們。
有時(shí)候,最容易的變通辦法是使用另一個(gè)STL實(shí)現(xiàn)。附錄B給一個(gè)這種情況的例子。實(shí)際上,STL用得越多,編譯器和庫(kù)
實(shí)現(xiàn)的區(qū)別就越重要。程序員在設(shè)法讓合法的代碼編譯時(shí)遇到困難,他們通常責(zé)備他們的編譯器,但對(duì)于STL,編譯器
可能是好的,而STL實(shí)現(xiàn)是不良的。為了強(qiáng)調(diào)你得依賴編譯器和庫(kù)實(shí)現(xiàn)的事實(shí),我使用你的STL平臺(tái)。一個(gè)STL平臺(tái)是一
個(gè)特定編譯器和一個(gè)標(biāo)準(zhǔn)模板庫(kù)特定實(shí)現(xiàn)的組合。在本書(shū)里,如果我提及一個(gè)編譯器問(wèn)題,你能確信我意思是編譯器有
問(wèn)題。但是,如果我說(shuō)你的STL平臺(tái)有問(wèn)題,你應(yīng)該理解為“可能是編譯器缺陷,可能是庫(kù)缺陷,或許都有”。
我一般提及你的“編譯器們”——復(fù)數(shù)。那是我長(zhǎng)期相信你通過(guò)確保代碼可以在多于一個(gè)的編譯器上工作的方法來(lái)改進(jìn)
你的代碼質(zhì)量(特別是移植性)的產(chǎn)物。此外,使用多個(gè)編譯器一般可以簡(jiǎn)化拆解由STL的使用不當(dāng)造成的錯(cuò)誤信息難
題。(條款49致力于解碼此類消息的方法。)
關(guān)于與標(biāo)準(zhǔn)一致的代碼,我強(qiáng)調(diào)的另一個(gè)方面是你應(yīng)該避免構(gòu)造未定義行為。這樣的構(gòu)造可能在運(yùn)行期做任何事情。不
幸的是,這意味著它們可能正好做了你想要的,而那會(huì)導(dǎo)致一種錯(cuò)誤的安全感。太多程序員以為未定義行為總會(huì)導(dǎo)致一
個(gè)明顯的問(wèn)題,例如,一個(gè)分段錯(cuò)誤或其他災(zāi)難性的錯(cuò)誤。未定義行為的結(jié)果實(shí)際上更為狡猾,例如,破壞極少引用的
數(shù)據(jù)。它們也可以通過(guò)程序運(yùn)行。我發(fā)現(xiàn)一個(gè)未定義行為的好定義是“為我工作,為你工作,在開(kāi)發(fā)和QA期間工作,
但在你最重要的用戶面前爆炸了”。避免未定義行為很重要,所以我指出了它會(huì)出現(xiàn)的通常情況。你應(yīng)該訓(xùn)練你自己警
惕這樣的情況。
- STM32固件庫(kù)使用手冊(cè)中文版以及技術(shù)手冊(cè)中文版pdf 0次下載
- 實(shí)用開(kāi)關(guān)電源設(shè)計(jì)-中文版pdf 0次下載
- FP8202規(guī)格書(shū)中文版pdf 0次下載
- FP6188規(guī)格書(shū)中文版pdf 0次下載
- FP6151規(guī)格書(shū)中文版pdf 0次下載
- FP6150B規(guī)格書(shū)中文版pdf 0次下載
- S7-STL中文編程手冊(cè) 27次下載
- Autocad試用版官方中文版免費(fèi)下載 23次下載
- 1965fb電源IC資料-中文版下載.pdf 0次下載
- PROE中文版免費(fèi)下載 0次下載
- Proteus中文版免費(fèi)下載 0次下載
- Effective Java中文版 0次下載
- 經(jīng)典中文版More+Effective+C++ 35個(gè)改善編程與設(shè)計(jì)的有效方法 0次下載
- 中文版第三版Effective C++ 高清PDF 0次下載
- effective stl pdf
- 片上軟件需要什么安全完整性? 367次閱讀
- 博途使用STL中的MOVE指令 5653次閱讀
- C++ STL基本概念是什么 1222次閱讀
- 什么是STL? 4042次閱讀
- C++之STL庫(kù)中的容器 996次閱讀
- STL的概述 1188次閱讀
- PLC梯形圖轉(zhuǎn)換成STL程序 4249次閱讀
- Boost庫(kù)是什么?C++ Boost的詳細(xì)資料簡(jiǎn)介 9171次閱讀
- WP_492 出色的計(jì)算密集型系統(tǒng)開(kāi)發(fā)平臺(tái) 4366次閱讀
- keil uvision2中文版|keil uvision2漢化補(bǔ)丁下載 1w次閱讀
- adc0809中文資料下載 adc0809引腳圖封裝及應(yīng)用電路 2w次閱讀
- keil uvision2下載|keil uvision2漢化免費(fèi)版下載 1.1w次閱讀
- AUTOCAD2009免費(fèi)下載中文版 CAD2009簡(jiǎn)體中文下載及安裝方法 1.2w次閱讀
- MAX232引腳圖功能應(yīng)用電路 MAX232中文資料PDF數(shù)據(jù)手冊(cè)下載 1.4w次閱讀
- PLC控制系統(tǒng)設(shè)計(jì)教程: 加熱爐送料系統(tǒng)——仿STL指令的編程方式梯形圖舉例 2590次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費(fèi)下載
- 0.00 MB | 1490次下載 | 免費(fèi)
- 2單片機(jī)典型實(shí)例介紹
- 18.19 MB | 93次下載 | 1 積分
- 3S7-200PLC編程實(shí)例詳細(xì)資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識(shí)別和講解說(shuō)明
- 4.28 MB | 18次下載 | 4 積分
- 5開(kāi)關(guān)電源原理及各功能電路詳解
- 0.38 MB | 10次下載 | 免費(fèi)
- 6基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
- 0.11 MB | 4次下載 | 免費(fèi)
- 7基于單片機(jī)和 SG3525的程控開(kāi)關(guān)電源設(shè)計(jì)
- 0.23 MB | 3次下載 | 免費(fèi)
- 8基于單片機(jī)的紅外風(fēng)扇遙控
- 0.23 MB | 3次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費(fèi)
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費(fèi)
- 4LabView 8.0 專業(yè)版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費(fèi)
- 5555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33562次下載 | 免費(fèi)
- 6接口電路圖大全
- 未知 | 30320次下載 | 免費(fèi)
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費(fèi)
- 8開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21539次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537791次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191183次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183277次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138039次下載 | 免費(fèi)
評(píng)論
查看更多