導航:首頁 > 編程語言 > c模板編程實戰

c模板編程實戰

發布時間:2023-06-05 06:16:58

Ⅰ C語言的經典編程例子


程序員》推薦C++ 圖書三人談

主持人:熊節(透明),《程序員》雜志編輯,C-View成員
嘉 賓:孟岩(夢魘),聯想公司掌上設備事業部應用開發處任職,C-View成員。與侯捷先生合譯《C++ Standard Library》一書
金尹(惡魔),上海天宇公司CTO,在《程序員》連載有「自由與繁榮的國度」系列文章

透明:「學C++用哪本書入門」,這是被問得最多的一個問題。但是哪一本書是最好的入門書?似乎很難找到答案。《C++ Primer》太厚,《Effective C++》對讀者要求比較高,《Essential C++》又常常被批評為「太淺」。
其實說穿了:no silver bullet。想從一本書學會C++,那是不可能的。有朋友問我如何學C++,我會建議他先去找本數據結構書,把裡面的習題全部用C++做一遍,然後再去看《Effective C++》。myan經常說「要在學習初期養成好習慣」,我對此頗不以為然。
個人認為,《Essential C++》適合作教材,《C++ Primer》適合作參考書,《Effective C++》適合作課外讀物。

惡魔:很後悔當初買了《C++ Primer》。因為從我個人角度來看,它的功能效用基本是和《The C++ Programming Language》重合。當然對於入門來說,它還是很不錯的。但是《C++ Primer》太厚,一來導致看書極其不方便,二來系統學習需要花比較長的時間。對於目前這個越來越快餐化的時代來說,的確有很多不適合的地方,不過可以作為初學者的參考書。現在我以一塊K3 CPU的代價把它借給了別人,希望我那位同事能夠從中得到一些益處。
如果已經具備了C基礎,我建議看國內的書,例如錢能的《 C++大學教程(第二版) 》。(如果沒有C的基礎還是看譚浩強的C語言)。這本書對C講得還算比較清晰,有很多習題值得一做,特別是最後的struct和union兩個部分。其中的一些演算法比較拖沓和繁瑣(比如樹和鏈表的遍歷演算法),讀者可以嘗試修改這些例子,作為最後對C語言的一些總結測試。

夢魘:這個問題讓我想起四五年前的情形。今天對於C++有一點認識的人,多半是從那幾年就開始學C++了。那時根本沒有品牌觀念。從書店裡找一本C++書,如果看著還算明白,就買下來。我記得那時候宛延闓、張國鋒、麥中凡教授的書都受到很高的贊譽。我個人最早的一本C++書是Greg Perry的一本書,今天想起來,其實是一本打著C++旗號的C語言教程。對我作用最大的一本書是國防科技出版社出版的一本書,書名記不得了,作者叫斯蒂芬·布萊哈。
透明:還記得以前曾批評過一本C++書,是北航出的,整本書就沒有出現過class關鍵字。那本書,說穿了其實只是介紹了C語言和iostream庫的用法,根本不能算C++。而當時我常常推薦的一本書是電子科技大學張松梅老師的C++教程。那本書,直到今天來看也沒有太大的問題,唯一的缺憾就是由於年代久遠,許多東西已經過時了。而對於一本技術書籍來說,「過時」是最不可接受的。
總體來說,那時使用C++的人真是在「盲人摸象」。不過這也有好處,就是對C++的很多細節能搞清楚,以後看到經典好書時比較容易理解;當然壞處就是概念不清,甚至都不知道C++和Visual C++、Borland C++到底有什麼不一樣。

夢魘:整個90年代,其實大部分人對於C++的認識都似是而非。一開始是等同於Borland C++,後來是等同於Visual C++和MFC。所以一般來說,打著BC和VC旗號的書賣得很好,人們覺得這就是C++。而我比較幸運,布萊哈的那本書雖然從現在的眼光來看談不上高超,但基本路子是對的。可能是因為原書是給UNIX程序員的培訓教材,所以沒有讓我一開始就形成「C++ == VC++」的認識。
其實一直到1996年,我們那裡搞計算機的都是唯Borland C++馬首是瞻的,到了VC 4.0出來,一下子格局全變了。1997年VC5推出之後,書店裡MFC書鋪天蓋地,學MFC的人,頭抬得都比別人高一些。不過現在看來,那時候大部分的MFC書都是三流貨色。我曾經有一段時間認為,那一批程序員中間有不少被誤導了。根本原因就是相對的封閉。

透明:我覺得一本書的價值有兩方面:第一,教給你實用的技術;第二,促使你去思考。對於一本介紹VC(或者說MFC)使用方法的書,我根本不希望它能促使我有什麼思考,所以我就一定要求它在技術上精益求精完美無瑕。我剛開始用VC的時候,買的第一本書就是潘愛民老師翻譯的《VC技術內幕》(第四版),沒有受到那些「三流貨色」的誤導,應該說是很幸運的。

夢魘:1999年機械工業出版社開始出版「計算機科學叢書」,其中的《Thinking in C++》第一版受到了廣泛的歡迎。其實我一直不認為這本書很出色,雖然拿過一次大獎。然而我們都得承認,這本書在C++書籍領域里第一次建立了品牌觀念,很多初學者開始知道,不是隨便買哪一本都一樣的。再往後就是2000年的《 深入淺出MFC(第二版) 》第二版,以及侯先生在《程序員》上發表的那一篇《C++/OOP大系》,加上整個大環境的變化,品牌觀念深入人心,C++書籍市場終於開始逐漸與世界同步。
回想往事,我的感覺是,那個需要戰戰兢兢選擇入門書的時代已經過去,今天的C++初學者,大可以放心地買口碑好、自己讀起來思路順暢的書,入門不再是太大的問題。還有一些程序員已經學了幾年C++,但看到今天出版的一些新書,感覺比較陌生,這也不是什麼問題。侯先生經常說「凡走過必留下足跡」,所謂「走彎路」,未必不是一件好事。
至於具體的推薦表,就不好一概而論了。總之在我的印象里,《Essential C++》、《C++ Primer》、錢能教授的C++教程,都不錯。甚至有人一上來就看Bjarne Stroustrup的《The C++ Programming Language》,只要他喜歡,也沒什麼不可以。

透明:我同意你的觀點。不管怎麼說,編程是門實踐性非常強的學問。要想對C++對象模型有深入的了解,最好的辦法就是寫一串程序去看結果;要想學會OOP,也只能從項目中學。對於初學者,最好的學習方法就是不停地寫程序,寫真正有用的程序,寫到有問題的時候就去查書,於是自然就會知道哪本書好哪本書不好。不過我們的教育制度能不能讓大學里的學生們有這樣的學習機會,我表示懷疑。
以我的經驗,學C++有兩個門檻:入門和使用。完全看不懂C++,這是一個門檻,但是只要有一本合適的入門書,很快就能跨過。要想真正用上C++,卻不是件很容易的事情。尤其對於學生來說,接觸到的東西多是「玩具」,很難有實戰的機會。所以經常看見有人問「C++到底能做什麼」,這是C++學習中一個比較麻煩的問題。我們都是做了相當長時間的C++程序之後才看到一些真正經典的書,也正是因為走了相當長的彎路之後才知道這些書的經典之所在。所謂彎路,我想也是一種必須的積累。就算一開始就看《Essential C++》和《C++ Primer》,沒有兩三年的時間恐怕還是難有所得。

惡魔:有兩句十分有道理的話,一是我大學的C語言老師說的「寫程序不如說是抄程序」,另一句是一網友說的「好的設計來自借鑒,天才的設計來自剽竊」。對於我這個理性批判主義者來說,這兩句話的確不太適合。但是無論從哪個角度來講,對於初學者來說,剽竊大師的作品是通向成功的最快捷徑。
我個人認為,對於C++的初學者來說,首先要確定自己專業領域內主要使用的特性的方向。因為C++的特性如此眾多,初學者想貪多基本是不可能成功的。C++的編程範式基本可以分為ADT+PP、GP和OO三個方向。對於ADT+PP範式來說,初學者的主要問題不是學習C++,而是學習C的使用。對於這樣的初學者,國內的幾本書還是寫得比較清楚,符合中國人的習慣,比如譚浩強的《C語言教程》、錢能的《C++語言大學教程》。這兩本書我首推第一本,因為這一本我潛心研究了一年,這本書當中很多程序是可以剽竊的,而且可以對這些程序進行加工和提升。比如結構這一章中,它所給出的用struct來實現鏈表、二叉樹的演算法是相當蹩腳的。學習ADT+PP的初學者將這本書揣摩透以後可以嘗試修改這兩個程序。另外這本書的第二版稍微涉及了一些關於「類」的內容。學習ADT+PP的初學者,可以不被OO中的一些專有特性擾亂自己的思路,對於類層次扁平、無繼承、無多態的程序編寫是有很大好處的。

透明:你好象比較推崇國內教授寫的書。現在社會上有種不好的風氣:一捧就捧上天,一貶就貶下地。就好象對待譚教授的書,前幾年是奉為經典,這幾年又有很多人使勁批評。學C++更是有點「崇洋媚外」,總是覺得初學就應該看《Essential C++》。我看這種觀點也是片面的。

惡魔:當然《Essential C++》也值得看看。但是我個人覺得這本書沒有譚浩強的《C語言教程》來得好。主要原因是:第一,C++的所有特性都點到了,但是不深,看了以後會三心二意沒有方向;第二,可以抄襲借鑒的例子太少。《C語言教程》中有很多有趣的問題,比如猴子吃桃、漢諾塔等等,這些例子對於剛剛涉及C/C++語言編程的人來說是學習編程很好的例子。《Essential C++》只能是前兩本書看透以後,作為學習C++特性的一個過渡性的書籍。讓讀者真正領略到什麼是C++的編程、和C編程的不同點在哪裡。

透明:我發現一個很有趣的現象:初學者往往喜歡問「哪本書比較好」,這讓我很是不解。這有點像一個剛學打籃球的人問「王治郅和科比誰比較厲害」。當然科比更厲害一些。但如果你是想學打籃球,這兩個人都非常非常有資格教你,你跟誰學都能學得很強——關鍵不是在於你選哪個老師,而是在於你自己用多少功夫去學。

透明:回到原來話題。學會了C++的語法,能看懂C++代碼之後,必須有些書來指導進階(或者叫指點迷津)。我覺得《設計模式》很好,能夠讓讀者看到一些精妙的用法。不過正如我經常說的,模式帶來的麻煩和好處一樣多,甚至麻煩還要更多。而且,C++本身的問題使得在C++中使用GoF模式愈加麻煩。

夢魘:《Design Patterns》這本書絕對是不可以沒有的,而且中英文版都不可少。最初我看中文版,說實話看不懂,但是也不覺得人家翻譯得不好,所以就想,大概是原文就很難懂,加上自己水平有限。於是總是想著再找幾本patterns的書來看。後來找到幾本書,口碑還不錯,不過水平高下,一比就出來了,還是那本《Design Patterns》最經典,最耐看。英文版出來之後,兩個版本對照看,明白多了。現在覺得,其實就設計模式來講,把這本看明白了就很不錯了,不用再花費很多心思找其他的書。我現在的包里始終夾著這本書,隨身攜帶,有備無患。
至於說設計模式的副作用,和可能帶來的弊端,我的體會也挺多。不過是這樣,我們想一想,究竟什麼情況下設計模式可以用得很好呢?一種是有經驗豐富的人引導,比如要是Robert Martin帶隊,你在某個地方用錯了設計模式,他就會指出來,說這里不對,將來會產生什麼樣的弊端。對於他來說,豐富的實踐經驗足以支持他進行「預測型」設計。但是大部分人沒這個能力,因此我們只好走第二條路和第三條路,就是「試探型」設計和「重構型」設計。遇到一個問題,你覺得用某種模式挺合適的,就大膽地用了,成功是積累經驗,發現不好,出了問題了,只好改回來,那也是積累教訓。這叫做「試探型」。至於重構,應該算是最有組織、成功率最高的工程化方法。先把問題「quick and dirty」地解決了,所有的暗礁都暴露出來,然後再根據實際情況採用合適的模式優化設計。現在XP和UP都高度重視refactory,UP在Elaboration和Construction階段都鼓勵抽出專門的iterations進行重構。所以說如果組織快速的軟體開發,當然比較傾向於這條路——打成功率嘛。

透明:講到重構,我順便說說《Refactoring》這本書的影響。從工程本身的角度來說,你所謂的「重構型設計」是沒有什麼問題的。但中國的開發者(也包括我在內)往往比較沖動,比較容易相信銀彈的存在。曾經有那麼一段時間,我在Java中嘗試過了重構的方法之後,又拿到C++中去嘗試。結果發現,在Java中速度非常快的重構過程,到C++中就被減慢了。究其原因,就是因為C++和Java的約束條件不同。拿著Java中成功的案例直接套C++,不失敗才怪。
所以,我必須說:《Refactoring》這本書很有價值。但對於C++程序員來說,它的價值是讓你思考,思考這種方法的可行性。如果一個C++程序員沒有打算遷移到Java,那麼我必須告訴他:《Refactoring》這本書不是讓你照著它用的,甚至不是讓你去相信它的。對於C++程序員,《Refactoring》全書可以放心相信的只有第13章,其他的部分,都必須非常謹慎地對待。

夢魘:我還要就「試探型」的方法多說兩句,我覺得對於個人發展來講,「試探」也是必不可少的,撞牆不可怕,高水平的人不都是撞出來的嗎?你失敗了一次,就知道這個模式有什麼潛在的問題,下次再用,就會多看幾步,像下棋似的。撞的多了,路數就出來了。
我不知道你們是否有這個感覺:用錯了模式,吃了虧,再回過頭去翻翻《Design Patterns》,看到人家早就指出來這個問題,不過就是那麼幾句話,原來看上去乾巴巴的,現在覺得句句都講到心坎上,GoF的形象馬上就高大起來,還帶著光環,感覺是既興奮又懊悔。

透明:現在回頭來看,我更欣賞myan推薦給我的《Designing Object-Oriented C++ Applications Using Booch Method》。這本書能夠幫助C++程序員理清思路培養習慣,可惜國內沒有引進。相比後來商業味濃厚的UML系列書籍,我覺得這本書對於面向對象的闡釋精闢獨到,至今未有能出其右者。

夢魘:剛才我們兩人都說到Robert Martin,他可是我的榜樣。那本1995年的《Designing Object Oriented C++ Application》,我覺得是每一個C++軟體工程師都應該反復研讀的書。可惜不僅國內沒有引進,在國外的名氣也不大。如果你覺得面向對象的那些道理你好像都明白,可就是一遇到實際問題就使不上勁,那這本書就是你的最佳導師。
提到理清思路,還有一本書不得不提,就是Andrew Koenig的《Ruminations On C++》。每個人都應該問自己,我學了這么多年的C++,究竟什麼是C++最基本的設計理念?遇到問題我第一個直覺是什麼?第一個試探型的解決方案應該具有那些特點?如果你不能給出明確的答案,就應該認真地去讀這本書,讀完了你就有了「主心骨」。

透明:插一句話,談談「推薦書」的問題。入門書基本上是放之四海而皆準的,所以推薦的意義也不大。而入門後的發展方向,每個人不同,這個時候就需要「高人」的指點。舉個例子:我學C++的時候,myan還不認識我,所以也沒有給我推薦書,我還是學過來了,所以即使你當時向我推薦了《Essential C++》或者《C++ Primer》,我也不會太感謝你;但在我認真研究OO的時候,你推薦Robert Martin那本書給我,對我幫助就特別大,而且我從別的地方也很難找到類似的推薦,所以我就很感謝你。
一個程序員,必須有framework的意識,要學會用framework,還要主動去分析framework(在這方面,《Design Patterns》能有一定的幫助)。但是,真正高質量、成氣候的framework的書恐怕也就只有針對MFC的。從這個角度來說,MFC縱有千般不是,C++程序員都非常有必要先去用它、熟悉它、研究它,甚至藉助《深入淺出MFC》這樣的書來剖析它。不然,很難有framework的意識和感覺。
當然,另一個framework也很好,那就是STL。不管用不用MFC、STL,對這兩個東西的掌握和理解都是極有幫助的。最近我又在看《深入淺出MFC》,雖然已經不用MFC編程了,但幫助是一定有的。

夢魘:MFC和STL方面,我還是比較推崇侯先生的兩本書《深入淺出MFC》和《STL源碼解析》。
《深入淺出MFC》這本書,名氣自然是大得不得了,不過也有不少人批評。其實書也沒有十全十美的,批評當然是少不了的,不過有的時候我看到有人評論這本書,把它跟Inside VC相比,真的是牛頭不對馬嘴。
你剛才其實說得很對,程序員應該有一點framework意識。而這本《深入淺出MFC》與其說是在講MFC編程,不如說通篇是在拿MFC為例分析Application Framework的架構和脈絡。所以無論你對於MFC本身是什麼態度,這本書對每一個C++程序員都有很大的益處。

透明:是的。《VC技術內幕》會告訴你「DYNAMIC_CREATE這個宏怎麼用」,《深入淺出MFC》則告訴你「DYNAMIC_CREATE這個宏是怎麼實現的」。所以,如果你只需要在VC下寫一些小應用程序,《深入淺出MFC》的價值並不太大;但是,如果你需要設計一個稍微大一點的東西(不一定是framework),MFC的設計思想就會有所幫助。

夢魘:另外,我覺得對於MFC也應該有一個公允的評價。過去是吹捧得天上有地下無,書店裡鋪天蓋地都是MFC的書,搞得大家只知有MFC,不知有C++,甚至直到現在還有人問:「我是學MFC呢,還是學C++?VC++是不是比C++更高級的語言?」MFC成了一尊神像,阻礙了人們的視線。所以得把它從神壇上拉下來。這就是過去一兩年有很多人,包括我在內批評MFC的一個目的。可是現在大家視野開闊了,.NET也出來了,MFC不再是神像了,少數人就開始以貶損MFC為樂了。我覺得這種態度是不對的。
什麼叫好的框架?我覺得在十幾年的時間能夠象MFC這樣保持穩定並且不斷進步的框架就是好的框架。可能我們在一些具體的設計問題上有不同看法,覺得「這個地方這么設計不是更漂亮嗎?」很多時候是的,但是這不重要,重要的是MFC成熟穩定、有十幾年的成功經驗,這是最了不起的東西。
另外一點,MFC中間包括著學習Win32 API編程的最佳資料。這是除了其framework方面之外的另一個亮點。我現在使用Win32 API開發,但是經常參考MFC的源代碼,收獲很大。

透明:STL方面,我對於剖析它的源代碼興趣並不大,畢竟裡面源代碼多是演算法問題。所以,《STL源碼剖析》我也只是隨便翻翻就束之高閣了。我覺得這本書用來做計算機系的數據結構和演算法教材不錯,不知道有沒有老師樂意這樣做。
對於STL,我的態度一向都是「應用至上」。不過,我一直認為SGI STL本身就是一本精彩的書,一本數據結構和演算法的經典參考書,同時也是泛型技術的參考書。想知道一個演算法是如何實現的,看看STL源代碼就行;想知道如何使用type traits,STL源代碼裡面也有例子。看別人寫的書,總覺得隔著一層紗,有點撓不到癢處的感覺。SGI STL的代碼寫得非常漂亮,一個C++程序員如果不看看這本書,實在是可惜。

夢魘:至於STL,除了《STL源碼解析》之外,我舉賢不避親,強烈推薦侯先生與我合譯的那本《The C++ Standard Library》。這本書質量之高是無需懷疑的。我現在手邊常備此書,隨時查閱,對我幫助很大。

透明:C++和Java相比,最大的優勢就是它沒有一個專門的公司來管它,最大的弱點也是它沒有一個專門的公司來管它。Java程序員在學會簡單的語法之後,立刻進入SUN提供的framework,一邊用這個現成的framework做實際開發,一邊在開發過程中繼續學習Java一些幽深的特性。而這個時候,C++程序員恐怕還在問「VC和BCB哪個好」呢。這無疑是浪費時間。

夢魘:剛才你說Java和C++的優劣,這個話題已經成了我們這個年代永不消失的聲波了。我也不想再談這個。不過有一點我得說清楚:現在我們很多用C++的人吃了不少苦頭,探過脖子去看看Java,覺得它真是太可愛了,這種印象是不準確的。另外,Java也不簡單,而且會越來越龐大復雜。在很多場合,Java還不具有競爭力。至於將來如何,我看有些Java愛好者也過分樂觀了,似乎計算機科學界幾十年解決不了的問題都可以借著Java的東風解決掉,恐怕沒那麼容易。

透明:那當然。我再次強調:No Silver Bullet。讀書很重要,但古人說「行萬里路,讀萬卷書」,還是把「行路」放在「讀書」前面。尤其對於技術書籍,如果它不能幫我解決問題、不能給我帶來非常實際的利益,那麼我是不會去讀它的。惡魔說得對,我們這個社會很快餐,我們這個行業尤其很快餐,我們也只能努力適應它。

Ⅱ 吐血整理:C++編程語言資源匯總

關於 C++ 框架、庫和資源的一些匯總列表,內容包括:標准庫、Web應用框架、人工智慧、資料庫、圖片處理、機器學習、日誌、代碼分析等。有需要的小夥伴可以收藏一下!

C++標准庫,包括了STL容器,演算法和函數等。

C++ Standard Library:是一系列類和函數的集合,使用核心語言編寫,也是C++ISO自身標準的一部分。

Standard Template Library:標准模板庫

C POSIX library : POSIX系統的C標准庫規范

ISO C++ Standards Committee :C++標准委員會


C++通用框架和庫

Apache C++ Standard Library:是一系列演算法,容器,迭代器和其他基本組件的集合

ASL :Adobe源代碼庫提供了同行的評審和可移植的C++源代碼庫。

Boost :大量通用C++庫的集合。

BDE :來自於彭博資訊實驗室的開發環境。

Cinder:提供專業品質創造性編碼的開源開發社區。

Cxxomfort:輕量級的,只包含頭文件的庫,將C++ 11的一些新特性移植到C++03中。

Dlib:使用契約式編程和現代C++ 科技 設計的通用的跨平台的C++庫。

EASTL :EA-STL公共部分

ffead-cpp :企業應用程序開發框架

Folly:由Facebook開發和使用的開源C++庫

JUCE :包羅萬象的C++類庫,用於開發跨平台軟體

libPhenom:用於構建高性能和高度可擴展性系統的事件框架。

LibSourcey :用於實時的視頻流和高性能網路應用程序的C++11 evented IO

LibU : C語言寫的多平台工具庫

Loki :C++庫的設計,包括常見的設計模式和習語的實現。

MiLi :只含頭文件的小型C++庫

openFrameworks :開發C++工具包,用於創意性編碼。

Qt :跨平台的應用程序和用戶界面框架

Reason :跨平台的框架,使開發者能夠更容易地使用Java,.Net和Python,同時也滿足了他們對C++性能和優勢的需求。

ROOT :具備所有功能的一系列面向對象的框架,能夠非常高效地處理和分析大量的數據,為歐洲原子能研究機構所用。

STLport:是STL具有代表性的版本

STXXL:用於額外的大型數據集的標准模板庫。

Ultimate++ :C++跨平台快速應用程序開發框架

Windows Template Library:用於開發Windows應用程序和UI組件的C++庫

Yomm11 :C++11的開放multi-methods.


btsk : 游戲 行為樹啟動器工具

Evolving Objects:基於模板的,ANSI C++演化計算庫,能夠幫助你非常快速地編寫出自己的隨機優化演算法。

Neu:C++11框架,編程語言集,用於創建人工智慧應用程序的多用途軟體系統。


Boost.Asio:用於網路和底層I/O編程的跨平台的C++庫。

libev :功能齊全,高性能的時間循環,輕微地仿效libevent,但是不再像libevent一樣有局限性,也修復了它的一些bug。

libevent :事件通知庫

libuv :跨平台非同步I/O。


音頻,聲音,音樂,數字化音樂庫

FMOD :易於使用的跨平台的音頻引擎和音頻內容的 游戲 創作工具。

Maximilian :C++音頻和音樂數字信號處理庫

OpenAL :開源音頻庫—跨平台的音頻API

Opus:一個完全開放的,免版稅的,高度通用的音頻編解碼器

Speex:免費編解碼器,為Opus所廢棄

Tonic: C++易用和高效的音頻合成

Vorbis: Ogg Vorbis是一種完全開放的,非專有的,免版稅的通用壓縮音頻格式。


生物信息,基因組學和生物技術

libsequence:用於表示和分析群體遺傳學數據的C++庫。

SeqAn:專注於生物數據序列分析的演算法和數據結構。

Vcflib :用於解析和處理VCF文件的C++庫

Wham:直接把聯想測試應用到BAM文件的基因結構變異。


壓縮和歸檔庫

bzip2:一個完全免費,免費專利和高質量的數據壓縮

doboz:能夠快速解壓縮的壓縮庫

PhysicsFS:對各種歸檔提供抽象訪問的庫,主要用於視頻 游戲 ,設計靈感部分來自於Quake3的文件子系統。

KArchive:用於創建,讀寫和操作文件檔案(例如zip和 tar)的庫,它通過QIODevice的一系列子類,使用gzip格式,提供了透明的壓縮和解壓縮的數據。

LZ4 :非常快速的壓縮演算法

LZHAM :無損壓縮資料庫,壓縮比率跟LZMA接近,但是解壓縮速度卻要快得多。

LZMA :7z格式默認和通用的壓縮方法。

LZMAT :及其快速的實時無損數據壓縮庫

miniz:單一的C源文件,緊縮/膨脹壓縮庫,使用zlib兼容API,ZIP歸檔讀寫,PNG寫方式。

Minizip:Zlib最新bug修復,支持PKWARE磁碟跨越,AES加密和IO緩沖。

Snappy :快速壓縮和解壓縮

ZLib :非常緊湊的數據流壓縮庫

ZZIPlib:提供ZIP歸檔的讀許可權。


並發執行和多線程

Boost.Compute :用於OpenCL的C++GPU計算庫

Bolt :針對GPU進行優化的C++模板庫

C++React :用於C++11的反應性編程庫

Intel TBB :Intel線程構件塊

Libclsph:基於OpenCL的GPU加速SPH流體模擬庫

OpenCL :並行編程的異構系統的開放標准

OpenMP:OpenMP API

Thrust :類似於C++標准模板庫的並行演算法庫

HPX :用於任何規模的並行和分布式應用程序的通用C++運行時系統

VexCL :用於OpenCL/CUDA 的C++向量表達式模板庫。


C++ B-tree :基於B樹數據結構,實現命令內存容器的模板庫

Hashmaps: C++中開放定址哈希表演算法的實現


Bcrypt :一個跨平台的文件加密工具,加密文件可以移植到所有可支持的操作系統和處理器中。

BeeCrypt:

Botan: C++加密庫

Crypto++:一個有關加密方案的免費的C++庫

GnuPG: OpenPGP標準的完整實現

GnuTLS :實現了SSL,TLS和DTLS協議的安全通信庫

Libgcrypt

libmcrypt

LibreSSL:免費的SSL/TLS協議,屬於2014 OpenSSL的一個分支

LibTomCrypt:一個非常全面的,模塊化的,可移植的加密工具

libsodium:基於NaCI的加密庫,固執己見,容易使用

Nettle 底層的加密庫

OpenSSL : 一個強大的,商用的,功能齊全的,開放源代碼的加密庫。

Tiny AES128 in C :用C實現的一個小巧,可移植的實現了AES128ESB的加密演算法


資料庫,SQL伺服器,ODBC驅動程序和工具

hiberlite :用於Sqlite3的C++對象關系映射

Hiredis: 用於Redis資料庫的很簡單的C客戶端庫

LevelDB: 快速鍵值存儲庫

LMDB:符合資料庫四大基本元素的嵌入鍵值存儲

MySQL++:封裝了MySql的C API的C++ 包裝器

RocksDB:來自Facebook的嵌入鍵值的快速存儲

SQLite:一個完全嵌入式的,功能齊全的關系資料庫,只有幾百KB,可以正確包含到你的項目中。


調試庫, 內存和資源泄露檢測,單元測試

Boost.Test:Boost測試庫

Catch:一個很 時尚 的,C++原生的框架,只包含頭文件,用於單元測試,測試驅動開發和行為驅動開發。

CppUnit:由JUnit移植過來的C++測試框架

CTest:CMake測試驅動程序

googletest:谷歌C++測試框架

ig-debugheap:用於跟蹤內存錯誤的多平台調試堆

libtap:用C語言編寫測試

MemTrack —用於C++跟蹤內存分配

microprofile- 跨平台的網路試圖分析器

minUnit :使用C寫的迷你單元測試框架,只使用了兩個宏

Remotery:用於web視圖的單一C文件分析器

UnitTest++:輕量級的C++單元測試框架


Cocos2d-x :一個跨平台框架,用於構建2D 游戲 ,互動圖書,演示和其他圖形應用程序。

Grit :社區項目,用於構建一個免費的 游戲 引擎,實現開放的世界3D 游戲 。

Irrlicht :C++語言編寫的開源高性能的實時#D引擎

Polycode:C++實現的用於創建 游戲 的開源框架(與Lua綁定)。


CEGUI : 很靈活的跨平台GUI庫

FLTK :快速,輕量級的跨平台的C++GUI工具包。

GTK+: 用於創建圖形用戶界面的跨平台工具包

gtkmm :用於受歡迎的GUI庫GTK+的官方C++介面。

imgui:擁有最小依賴關系的立即模式圖形用戶界面

libRocket :libRocket 是一個C++ HTML/CSS 游戲 介面中間件

MyGUI :快速,靈活,簡單的GUI

Ncurses:終端用戶界面

QCustomPlot :沒有更多依賴關系的Qt繪圖控制項

Qwt :用戶與技術應用的Qt 控制項

QwtPlot3D :功能豐富的基於Qt/OpenGL的C++編程庫,本質上提供了一群3D控制項

OtterUI :OtterUI 是用於嵌入式系統和互動 娛樂 軟體的用戶界面開發解決方案

PDCurses 包含源代碼和預編譯庫的公共圖形函數庫

wxWidgets C++庫,允許開發人員使用一個代碼庫可以為widows, Mac OS X,Linux和其他平台創建應用程序


bgfx:跨平台的渲染庫

Cairo:支持多種輸出設備的2D圖形庫

Horde3D 一個小型的3D渲染和動畫引擎

magnum C++11和OpenGL 2D/3D 圖形引擎

Ogre 3D 用C++編寫的一個面向場景,實時,靈活的3D渲染引擎(並非 游戲 引擎)

OpenSceneGraph 具有高性能的開源3D圖形工具包

Panda3D 用於3D渲染和 游戲 開發的框架,用Python和C++編寫。

Skia 用於繪制文字,圖形和圖像的完整的2D圖形庫

urho3d 跨平台的渲染和 游戲 引擎。


Boost.GIL:通用圖像庫

CImg :用於圖像處理的小型開源C++工具包

CxImage :用於載入,保存,顯示和轉換的圖像處理和轉換庫,可以處理的圖片格式包括 BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX, TGA, WMF, WBMP, JBG, J2K。

FreeImage :開源庫,支持現在多媒體應用所需的通用圖片格式和其他格式。

GDCM:Grassroots DICOM 庫

ITK:跨平台的開源圖像分析系統

Magick++:ImageMagick程序的C++介面

MagickWnd:ImageMagick程序的C++介面

OpenCV : 開源計算機視覺類庫

tesseract-ocr:OCR引擎

VIGRA :用於圖像分析通用C++計算機視覺庫

VTK :用於3D計算機圖形學,圖像處理和可視化的開源免費軟體系統。

最後, 對於學習編程或者在工作想升職的程序員兄弟,如果你想更好的提升你的編程能力幫助你提升水平! 筆者這里或許可以幫到你~

編程學習書籍分享:

編程學習視頻分享:

分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!

Ⅲ C語言學習資源整理

C語言學習資源匯總

一、C語言入門課程

1.實驗樓一C語言入門教程

教程+在線開發環境的方式,教程文檔詳細的講解C語言基礎知識,在線開發環境和本地一樣,可以梁握隨時動手跟著教程操作,動手學習的方式非常適合入門初學者。

2.gitbook一一笨方法學C

內容較完整豐富,相當於一本書籍了,適合新手入門學習。

3.菜鳥教程一C 語言教程

純在線文字教程,講解的不是那麼詳細,不過簡單易懂,適合入門初學者學習,看完後可對C語言有個大概的認知。

4.幕課網--C語言入門

教程+"環境",講解的比較細致,也很簡單易懂,跟著教程可傻瓜式操作學習,適合入門新手。局渣盯

5.網易雲課堂一-C語言基礎入門

純視頻方式,每個視頻15分鍾左右,介紹的比較詳細,如果喜愛看視頻來學習的話,可以看看。

二、C語言實戰項目

免費的項目教程:

C語言製作2048;

C語言快速實現五子棋、鬥地主的發牌器;

C語言製作簡單計桐和算器;

用 C語言編寫自己的編程語言。

三、C語言筆記文章整理

學完基礎、做完項目之後,就會有各種問題,這個時候就需要學習筆記啦,或自己總結,或看別人的總結都可以。

1.C 語言中的指針和內存泄漏。

2.如何寫出優美的 C 代碼。

3.C語言的整型溢出問題,酷 殼 - CoolShell.cn。

4.易被遺忘的C/C++要點總結。

5.C/C++的mem函數和strcpy函數的區別和應用。

6.C語言的變數作用域及頭文件。

7.10個經典的C語言面試基礎演算法及代碼。

四、其他資源

再整理一些資源,零七碎八的,對於學習C語言的過程中會很有幫助的。

1.awesome-c(英文)、awesome-c-cn(中文版)

2.源碼閱讀--十個C開源項目。

3.一千行以下有哪些值得學習的小型開源項目? - 互聯網-知乎。

4.值得推薦的C/C++框架和庫。

5.C與 C++ 的真正區別在哪裡?

6.初學者的編程自學指南。

7.免費學習編程的10個好工具。

8.11款學習編程的好玩的瀏覽器游戲(譯)。

9.每個程序員都應該收藏的演算法復雜度速查表。

Ⅳ 求C/C++視頻教程!

《C++語言 45集 鄭莉 清華大學》網路網盤資源免費下載

鏈接: https://pan..com/s/1RuvlguuUC5-JX6Bv21d_xw

?pwd=1ifw 提取碼: 1ifw

C++語言 45集 鄭莉 清華大學|9c++簡單程序設計(七).flv|8c++簡單程序設計(六).flv|7c++簡單程序設計(五).flv|6c++簡單程序設計(四).flv|5c++簡單程序設計(三).flv|4c++簡單程序設計(二).flv|45異常處理.flv|44泛型程序設計與c++標准模板庫(二).flv|43泛型程序設計與c++標准模板庫(一).flv|42流類庫與輸入輸出(二).flv|41流類庫與輸入輸出(一).flv|40群體類和群體數據的組織(六).flv|3c++簡單程序設計(一).flv|39群體類和群體數據的組織(五).flv


閱讀全文

與c模板編程實戰相關的資料

熱點內容
單片機編程語言有哪些 瀏覽:441
蘋果安卓系統筆記本怎麼設置密碼 瀏覽:982
只能加密不能解密有什麼用 瀏覽:239
怎麼製造app 瀏覽:121
電腦解壓死機了怎麼辦 瀏覽:607
歐洲伺服器雲進銷存 瀏覽:192
程序員python和java 瀏覽:949
文件夾怎麼插入幻燈 瀏覽:282
帶孩子到崩潰怎麼解壓 瀏覽:63
戰地一被踢出伺服器會顯示什麼 瀏覽:837
怎麼看手機上所有的app 瀏覽:365
網路拚命令怎麼拼 瀏覽:836
產品經理和程序員優先選哪個 瀏覽:393
樸素的app應用怎麼推廣 瀏覽:586
怎麼查校園卡app專屬流量 瀏覽:437
少兒編程教育培訓視頻 瀏覽:562
華為平板如何裝兩個一樣的app 瀏覽:728
程序員與劫匪 瀏覽:623
協同演化演算法及其在數據挖掘中的應用 瀏覽:225
單片機可控硅開關電路 瀏覽:121