侯捷stl源碼剖析pdf
㈠ 推薦幾個學習C++語言好的網站呢
BBS 水木清華站
一些同學問我,如何學好C++,我沒有別的辦法給你們,唯一的辦法就是讀書,讀大
量的書,就可以解決。要把C++作為日常語言,而不是一種程序語言,這樣就好辦了。
有人又要問我,那麼我應該讀什麼書才好?沒有時間怎麼辦?
我只能對你們說,沒時間的話,就別學C++了,做你們喜歡做的事。生活中沒有
C++,也同樣美好。
如果你准備學,一定要學好,那麼我開個書單,應該問題不是甚大。
首先肯定要讀一讀Bjarne Stroustrup的The Design and Evolution of C++,了解
一下這個語言的歷史。接下來就可以看別的書了,但要不停地回頭看這本書,看到
你不斷地學到的新技術是怎麼樣一點點地被接納到這個語言中去的。
第一本書因人而異,基礎好一些的,可以看Stanley B. Lippman的C++ Primer,這
本書非常地巨大,你打星號的部分可以不要看。基礎不太好的,可以看Stanley B.
Lippman的Essential C++,這本書份量要輕得多,不過四個C++的范型都講了,而
且講得非常清楚。
第二本應該停止技術層面的東西,靜下心來看看Pike和Kernighan的The Practice
of Programming,好好地整理一下,在程序設計中應該有哪些注意的事項。這本
非常薄的booklet,可以說是程序員必讀的指南。
第三本書,就應該是Bruce Eckel寫的、候捷譯的Thinking in C++,這本書每過
半年我就要重讀一遍。可以說每一章都是寫得發人深省的,這本書讓我感覺到了
技術運用的非常高的境界,但是語言非常平實,只要認真地讀,即使基礎不行,
也一定可以懂。我在教課的時候,就是用這本書(面對的學生是零基礎)。
要更上一層的話,就要慢一步,先要把握C++設計習慣的良好。這是Scott
Meyers的Effective C++和More Effective C++帶給我們的無盡收益。我More
Effective C++買不起,只好花了10塊錢復印裝訂了一本"線裝本",看起來像葵花
寶典(;-))。這兩本書是真正的經典,作者對C++的純熟,使得語言的風格讀起來
簡直是如飴甘甜,就像他站在對面在講課。我手中有這兩本書的原版CD,如果有興
趣,可以發E-mail到[email protected]或在飲水思源投條兒給gaobo索要,只要您提供
光碟我就給免費燒。如果你已經深刻地理解了Effective C++和More Effective
C++,那你可以發現,你在眾人中已經是雞群之鶴。可以指導項目運作了,可以編
寫一切你想做的程序了,可以指出別人看起來不錯的代碼的大小問題了。如果你能
一眼看出有人的代碼是對應於"條款27"或"條款M6",那你可真是讓本人刮目了。
我已經講了,如果要寫程序,EC++和MEC++的境界已經足以使你自如應付,可是如
果你還不滿足,想關注一些理論層面的問題,或是想看看實現的代碼,你就不應該
錯過這幾本好極了的書。我是說Herb Sutter的Exceptional C++和More
Exceptional C++,這兩本書的難度是非常大的,我對每一條的閱讀筆記都是十多
頁。特別是泛型程序設計的部分,這兩本書旁徵博引,極盡深入探討之能事,每每
看懂一條,都抹汗一次,大感酣暢淋漓;還有侯捷的 STL源碼剖析 ,以實際的
例子一點點地講解一個STL是怎麼樣實現的,我是剛開始讀,不發表評論;而
Stanley B. Lippman,Cfront的實現者之一,執筆寫出Inside the C++ Object
Model,我只有一個字,就是基本帥呆了。我從中了解了無數的編譯器解釋源代碼
的細節,以及記憶體分配的細節,呵呵,這些都知道了,我還怕什麼呢?最近得到
了另一Cfront實現者、C++標准委員會Koenig的 C++沉思錄,看起來非常不錯,這
里也推薦給大家,但我也沒看完,亦無發言權。
最後最後,你們,未來的C++理論家們,可要記住,Bjarne Stroustrup的The C++
Programming Language無論如何也應該讀個四五遍!這是一切C++的書本的源泉。
如果還覺得不夠,就向C++標准委員會訂購一本C++標准。
一切中國大陸作者的書,一概不要看(包括我的)。一切VC++或講特定的編譯器的
書,一概不要看。如果需要補C語言的課,買一本非常小的K&R的The C
Programming Language足矣,其它的書一概不要看。不要先學C,再學C++,而要直
接學C++。你不是先學古文,再學白話的,對不對?所以相信我,直接來更容易。
以上文字,皆為原創,本人願意為每個字負責。
1、《Effective STL》
訂購:
作者:Scott Meyers
出版社:中國電力出版社
一開始欺負這本書比較薄,想快點看完,但不久就發現自己已經翻不動了。直
到看完最後一個字,才發現一個基本的事實:薄的不是這本書,而是自己的見識。
有關STL的書也讀了不少,正如讀《Effective C++》以前,有關C++的書也讀了
不少。Meyers的書總是給人一種脫胎換骨的提升感覺,他總能在大家以為老生常談
的地方挖出意想不到的新意,並指出一些一般人習以為常的東西其實存在種種危機,
或是在一些看來完全等價的選擇中,為特定的場合選擇最有效的(Most
Effective)那一種。而且他的切入口總是讓人看得懂的(不像Stroustrup的書,
第一句話就要琢磨半天),但是他總是會選擇幾個拓展點,並把它們分析得淋漓盡
致,這時候就需要一段代碼一段代碼甚至是語句粒度地閱讀了——當然,最後總是
看得懂,這和讀者的閱讀程度總是正比,這會給人極大的成就感。可以說,在STL
實踐的書籍,無書可出其右(當然在STL實作方面,我還是要向大家推薦侯捷的
《STL源碼剖析》)。
讀完這本書後,和Pascal就產生明顯的距離感了。這里我仍然要說:請熱愛
Delphi!我還是更願意寫「var s:set of char;」而不是
「set , allocator > s」,;-)。
2、《Modern C++ Design》
訂購(中文):
訂購(影印):
作者:Andrei Alexandrescu
譯者:侯捷、於春景
出版社:華中科技大學出版社(中文)
中國電力出版社(影印)
讀完這本書的第一頁,我就知道自己放不下它了,但我也知道,我的苦難經歷
又要多上一筆了。用C++實作設計模式,已經是骨灰級的難度,但這本書明顯還在講
一個template的對象模型的問題,這在我讀《Inside the C++ Object Model》時是
屢攻不下的難點。不過,出乎意料的是這本書居然使我具有一些概念了,而且動手寫
出了一個SmartPointer。
這本書我還遠不能說我讀懂了,但是確乎是讀完了。如果你還沒有讀過對象模型
和設計模式的書,我認為需要讀一讀。否則,直接看這本書根本就是受罪。最近,有
一些朋友也注意到設計模式的重要性了,可能從明年起我在《電腦報》上要發表一些
文章,屆時請朋友們指教吧。
--
㈡ C++ STL有哪些經典書籍
經典書籍比較多,其中最經典的就是《C++標准程序庫:自修教程與參考手冊》。
㈢ 關於台灣技術作家侯捷老師的書籍
譯著作品 《無責任書評一、二、三》、 《深入淺出MFC》、 《多型與虛擬》、 《Word排版藝術》 《STL源碼剖析》 翻譯 《Inside the C++ Object Model》 《Inside Visual C++》 《Windows 95 System Programming Secrets》 《System Programming for Windows 95》 《Essential COM》、《ActiveX controls Inside Out》 《Multithreading Applications in Win32》 《The Java Programming Language, 4/e》 《Refactoring: Improving The Design of Existing Code》 《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》 《Refactoring to Patterns》 《C++ Primer, 4/e 》 《The Art of C++》 《The Art of Java》 《Exceptional C++》 《C++ Templates: The Complete Guide》 《Practical Java Programming Language Guide》 《Modern C++ Design》 《The C++ Standard Library: A Tutorial and Reference》
麻煩採納,謝謝!
㈣ c++ stl里的向量vector非常好用,那麼它是怎麼實現的呢
這個要去翻源碼了,STL里的代碼說實話,真的看不太懂。
如果不是太糾結於具體細節,可以簡單講講基本的實現思路,大致如下:
vector從功能上來講,屬於順序存儲容器,所以底層實現一般基於數組。
vector使用模板元編程技術實現,具體一點就是編譯器根據使用時指定的實際類型在編譯時執行模板特化,編譯出對應的代碼。也就是說vector<int> v1; vector<double>v2;它們各對應一個特化版本的代碼。這提高了代碼的抽象級別,但是對帶來了代碼膨脹的問題。
vector的重要特性之一就是實現了數組的動態遞增。簡單來說就是容器內部記錄當前的足最大容量和使用量。當添加元素的時候,如果容器類發現當前的容量已耗盡,容器類會自動地重新分配一個更大容量的數組,把當前的所有元素過去,然後釋放掉舊的數組,從而實現動態自增,這一切對使用者來說完全透明。
vector提供迭代器來提供統一的遍歷訪問介面,方便與STL中的其它組件進行交互。
這其中會有很多的細節,比如:
1. 是否允許vector在必要時縮小自身容量?
2. vector容量耗盡後的遞增量是多少?
3. 是否應該提供線程安全容器?
有些東西可能真的需要去翻源碼去看才能搞明白。或者可以參考侯捷的《STL源碼剖析》。其實vector本身的實現並不會太復雜,它的實現思路也很簡單,但是設計層面的一些取捨就需要經過仔細考量了。一般來說,STL是一個足夠堅實的後盾,我們會頻繁地使用它,以構建健壯高效的軟體。能夠理解STL里的一些設計思想和實現方式,對提高我們的編程思維和編程能力會所幫助。
㈤ 《STL源碼剖析》pdf下載在線閱讀,求百度網盤雲資源
《STL源碼剖析》侯捷電子書網盤下載免費在線閱讀
鏈接:
書名:STL源碼剖析
作者名:侯捷
豆瓣評分:8.7
出版社:華中科技大學出版社
出版年份:2002-6
頁數:493
內容介紹:
學習編程的人都知道,閱讀、剖析名家代碼乃是提高水平的捷徑。源碼之前,了無秘密。大師們的縝密思維、經驗結晶、技術思路、獨到風格,都原原本本體現在源碼之中。這本書所呈現的源碼,使讀者看到vector的實現、list的實現、heap的實現、deque的實現、Red Black tree的實現、hash table的實現、set/map的實現;看到各種演算法(排序、查找、排列組合、數據移動與復制技術)的實現;甚至還能夠看到底層的memory pool和高階抽象的traits機制的實現。
作者介紹:
侯捷,出生於1961年09月28日,台南縣柳營鄉人,南京大學客座教授。第一次在大陸大學授課: 南京大學軟體學院 and 同濟大學軟體學院。
㈥ 怎麼查看C++庫函數的源碼
如果你想看stl裡面的源碼可以去SGI 下載源代碼,Download STL source code
去這個網站下載源碼,sgi版本的stl代碼一般來說可讀性比較好,我正在看。
sort函數的代碼在stl_algo.h文件里。侯捷有本書叫做《stl源碼剖析》
如果是vs2008或者2010可以在Microsoft Visual Studio 10.0\VC\crt\src查看
另外還有本書叫做《c標准庫》但是現在好像絕版了。
也可以去這個找:在glibc庫里,可去其官方網站下載(最新是2。7的),然後查找一下你要的函數。
㈦ 求程序員入門書籍,我是學C++的,想考個初級程序員
下面是我根據別人的提示和自己的參考總結出的幾個階段的書籍,希望對你有幫助!!
第一階段:
1::H.M.Deitel和P.J.Deitel的《 C++ How to Program 》(C++大學教程)
2:: 錢能的《C++程序設計教程》
3::Stanley B.lippman著 侯捷 譯的《essential c++》
4::Stanley B.Lippman,Josee LaJoie,Barbara E.Moo的《c++ primer》
5::Bjarne Stroustrup的《the c++ programming language》
第二階段:
1::Scott Meyers的《effective c++》
2::Herb Sutter的《exceptional c++》
3::Scott Meyers的《more effective c++》
4::Herb Sutter的《more exceptional c++》
第三階段:
1::Stanley B.lippman的《insied the c++ object model》(深度探索C++ 對象模型)
2::Bjarne Stroustrup的《The design and evolution of c++》(C++的設 計與演化)
3::tephen C. Dewhurst的《C++ Gotchas: Avoiding Common Problems in Coding and Design》(C++程序設計陷阱)
第四階段:
1:: Nicolai M.Josuttis的《the c++ standard library》(C++標准程序庫 —自修教程與參考手冊)
2::Scott Meyers的《effective stl》
3::Matthew H. Austern的《generic programming and the stl》(泛型編 程與STL)
4::侯捷的 《stl源碼剖析》
第五階段:
1::Herb Sutter的《exeptional c++ style》
2::《c++ template》
3::Andrei Alexandrescu的《modern c++ design》
第六階段
1::《C++ 輸入輸出流及本地化》《C++ Network Programming》《大規模C++程序設計》
2::Barbara E.Moo和Andrew Koenig的《Ruminations On C++》(C++ 沉思錄)
其他的:
Stanley B. Lippman,《Inside The C++ Object Model》影印版、中文版《深度探索C++對象模型》
Elements of Reusable Object-Oriented software》影印版、中文版《設計模式:可復用面向對象軟體的基礎》
John Lakos的著作《Large-Scale C++ Software Design》(《大規模C++程序設計》
Andrew Koenig和Barbara Moo在《Accelerated C++: Practical Programming by Example》《Ruminations on C++》
Bruce Eckel,《C++編程思想》
windows編程系列:
Charles Petzold 的 《Programming Windows》(Windows程序設計)
Jeffrey Richter 的《》(Windows核心編程)和《Advanced Windows》(Windows 高級編程指南)
數據結構和演算法
1::清華教授嚴蔚敏和廣東工業大學教授吳偉民的《數據結構(C語言版)》
2::清華教授殷人昆的《數據結構(用面向對象方法與C++描述)》
3::經典書籍:Mark Allen Weiss的《Data Structures and Algorithm Analysis in C》(數據結構與演算法分析--C語言描述)和《Data Structures and Algorithm Analysis in C++》(數據結構與演算法分析--C++語言描述)
4::王曉東的《演算法設計與分析》
5::M.H.Alsuwaiyel(沙特)的 《Algorithms Design Techniques and Analysis》(演算法設計技巧與分析)
6::經典:Thomas H.Cormen, Charles E.Leiserson的《Introction to Algorithms》(演算法導論)