標籤:

如何正確的通過 C++ Primer 學習 C++?

本人即將讀研,雖然考的是本專業(GIS),但是研究生讀的專業在計算機學院,要求所有研究生都要會編程。本科期間學過C++,但是基本忘的差不多。現在暑假已經被要求到學院搞項目,但是因為對編程只有概念上的認識,所以現在都是在自學C++。這幾天開始從頭看C++ primer,但是因為基礎實在薄弱,很多內容看很久都看不懂,上網查資料也是一片模糊。看了幾天之後,覺得我學習的方法有問題(我是每天都在練習他的習題)。我知道學習程序語言要多敲代碼,但是這個敲代碼不知道從哪裡入手,看書也不知道哪些是重點,哪些現在可以不看的。完全沒有一個詳細的規劃,很亂。求大神給些意見!謝謝!!

————————————————————————————————

7.13 更新

我現在跟著項目,就是修改一些BUG,對於這樣的實戰,不知道對學習C++的幫助有多大?

————————————————————————————————

7.15 更新

前幾天把第三章看了一半,剛剛開始一直沒弄懂什麼是容器,後來通過上網查資料,獲得了一些比較通俗的解釋,不知道這樣會不會對概念的理解有偏差。


個人經驗,C++ primer 第一次可以跳著看。關鍵是要儘快用起來,在使用中熟練,而不是在細節中迷失。

以C++ Primer第五版為例,第一遍讀的時候:

Part1也就是前七章,除了6.6,6.7節,都要通讀。尤其是第三章初步介紹了vector和string,簡直就是新手福音,搞定這兩個容器就能寫一些簡單的程序。

Part2基本就是數據結構和演算法,如果有基礎讀起來很輕鬆。

9,11兩章介紹的容器,以及12.1節的智能指針要通讀。多用智能指針和容器,遠離segment fault. 第10章里的泛型演算法可以慢慢讀,讀完以後可以寫出高逼格的函數式風格C++。12.2節講了怎麼用new和delete分配空間,題主作為新手,知道這種寫法就行,寫程序時盡量用容器代替原始數組,尤其是代碼里最好不要有delete。

Part3是塊硬骨頭,標題就是Tools for Class Authors. 作為一個"class user",有些部分第一次是可以略過的。

13章很重要,要細讀。初始化,複製,賦值,右值引用是C++里很微妙很重要的部分,別的語言對於這些概念很少有區分得這麼細的。這一章不但要精讀,還要完全掌握。

14章的操作符重載第一次可以觀其大略;14.9節第一次可以跳過。

15章講OOP,重要性不言而喻。如果之前一點概念都沒有,學起來會覺得比較抽象。網上關於OOP有很多通俗有趣的文章,可以一起看看。

16章講泛型編程,第一次讀16.1節,掌握最基本的函數模板和類模板就行了。

Part4就更高檔了,很多內容第一次就算啃下來,長久不用又忘了。第一次讀推薦把18.2節讀懂,命名空間簡單易用效果好。別的內容可以觀其大略,用時再看。17.1節的tuple是個有趣的東東,可以讀一讀。17.3節的正則表達式和17.4節的隨機數也許有用,也可以讀一讀。如果需要讀寫文件,要讀一下17.5.2節的raw I/O和17.5.3節的random I/O。

最後給題主的建議是,寫C++,要盡量避免C的寫法。用static_cast而不是括弧轉換符;用vector而不是C裡面的數組;用string而不是char *;用智能指針而不是原始指針。當然I/O是個例外,printf()還是比cout好用的;轉換數字和字元串時sprintf()也比stringstream快


對於工程性、技術性的知識,沒有實踐的感性認識作為基礎,讀也讀不懂。那麼問題來了,沒有實踐就沒法讀懂,沒法讀懂自然也就沒法去做正確且高質量的實踐,問題似乎進入了一個死循環。

學習東西最怕不知道學的東西有什麼用處,只要是這樣,多半會半途而廢。而個問題的深層次原因就是上面說的。

要想打破這個死循環,你唯一能做的就是調整心態,然後讀一點就實踐一點,一點一點的往前挪。這是學習任何新知識所必需的「痛苦」經歷。在這裡我給你幾點建議,幫助你儘可能的減輕「痛苦」,讓你起碼能有一個開始:

1.第一遍要通讀,而且可以不求甚解,但必須讀的有速度,不要在不懂的地方過多的停留,不要試圖在第一遍的時候就搞懂所有細節。假如讀到後面需要前面的知識,但是又忘記了,可回頭看,也可不回看。很多人想用c++ primer學習c++,但是第一遍都沒讀完就放棄了。

2.接上條。讀第一遍的目的是讓你知道c++都有什麼東西,先混個臉熟,等日後見到一些比較高級的特性心裡不會發慌。

3.調整心態,不要急於求成,除非你已經擁有了豐富的編程經驗,否則一個假期不可能到達熟練掌握c++的程度。要認清這一點,遇到挫折了不要懷疑自己,大家都是這麼過來的。

4.c++不是一門可以邊學邊乾的語言,裡面坑很多,要是一知半解就去用,很可能掉坑裡了還不知道。

5.如果覺得c++ primer太厚,可以讀讀作者寫的另外一本:Essential C++ (豆瓣)。

6.關於書上的習題,第一遍看的時候可以不做。原因是做習題就會陷入到細節中,學任何東西過早的陷入細節都不是好事情。凡是過早陷入細節的,很少有能堅持到最後的。


首先,看c++primer

一定要看第5版

1.從頭開始看,別跳

c++11穿插在書的每一個角落,跳到後面你可能看到新標準又返回來看.

而且這種經典書看幾遍每次也會有新收穫

2.課後習題一定要做

課後習題才是查露補缺.一定要做,做題和不做差別太大了,而且課後很多經典題

3.最好記筆記,這種大部頭不能保證所有都常用,所以有些會忘的很快..記了筆記可以快速記憶起來自己看的

以上是我看完c++primer第4版沒做習題和第5版做完課後習題的感受

這麼做比較費時間,但是c++語法層應該沒問題了。

習題答案github有很多

第5版6-16章筆記我都記錄成博客了,記的比較詳細,如果你需要可以發給你

補充:筆記鏈接專欄:c++primer


基礎薄弱的話推薦從《C++ Primer Plus(第6版)》看起,看完了這本(習題要做)後再回去看《C++ Primer(第5版)》。


表示正在啃C++primer,一直沒有耐心做完書上的習題,慚愧啊


老實說,我覺得如果你真的一點編程經驗都沒有完全從零開始的話,C++ Primer的Primer一詞對你來說可能並不適用。這本書其實還是有一些門檻的,只是相對於其它比如Inside C++Object Model,Effective C++,Exceptional C++甚至The C++ Programming Language這些書來說門檻要低那麼一點。

所以,如果你是科班出身,大可以不緊不慢的在大學裡學完C++的課程再來看這本書。可以加深你對C++的認識,如果你直接就入門這本書學編程,其實我並不推薦。

另外這本書真的很實用,很多技巧是工作中馬上就能用到的,所以無論你做什麼行業,只要用C++開發程序,這本書我認為無論如何都是值得一看的。


《C++ Primer》根本不適合新手入門。

如果用自然語言做類比的話,它更像是一本語法書和詞典。有基礎拿它來補缺解惑是很好的,但是入門真的不適合,它的章節排布會把入門者弄瘋。

修bug是讓新入職的同事快速了解項目中的代碼的一種非常好的方式,這個本身沒有問題。我們通常這麼做,效果很好。但是有個前提,那就是沒有語言上的大問題。

讓一個寫代碼讀代碼能力有問題的新手來通過修bug做語言的入門,這簡直難以想像。


一章都別跳,把習題做完。

別給自己找借口。


我C++ Primer Plus和C++ Primer 都看過,我還是比較喜歡C++ Primer Plus的風格,可能由於是從C Primer Plus看過來的,網上有每個實例的完整代碼,邊調試邊看書會效果比較好。C++ Primer相對 C++ Primer Plus要抽象一點,也更深一點,但是缺少完整的實例工程,學起來不是很好,個人建議先看C++ Primer Plus,把每個實例調試一遍,實踐出來的效果更好,C++ Primer就當做是工具書吧,有疑惑的時候再翻翻。C++ 過於龐大,一定要有實際的工程代碼才能理解的比較好。例如opencv是C++寫的計算機視覺庫,拿幾個工程來練練手,看opencv函數的實現細節,幾個工程下來,C++會進步不少的!哎。。。虧我寫了三年代碼,現在都廢了。。。


關於語法,如果之前學過C語言,可以直接看【類】那一章,了解對象的構造和銷毀。關於【模板】,只要知道 vector& 是什麼就行了。

關於容器,需要了解和會用容器有 vector,map,deque,unordered_map,list.

關於內存管理,看這篇文章。C/C++內存管理詳解

關於打代碼,建議上 LeetCode Online Judge 把跟 array,list,tree 有關的題目做一下, easy 即可達到訓練強度。

-------------------------------------------------------------------------------

補充孟岩的一篇文章

《 快速掌握一個語言最常用的50% 》


看完再說啊,想法這麼多幹什麼,先從頭到尾看一遍。


視頻+書籍+編碼。

C++primer確實詳細、全面,但對於初學者來說,並不知孰輕孰重,不容易抓去C++中的哪些細節是重點,哪些繁瑣的細節是在工程中可以現查的。初讀時,可以先找來一套C++視頻教程,根據視頻中所講的點去翻閱C++primer。視頻中有講的不完善的地方可以看書來補充。邊看視頻邊看書的另一個好處就是先從視頻中對某個概念(譬如說容器)有了一個具體的認識,之後再去閱讀抽象的文字便會少些迷惑。

書中的代碼及習題建議有時間去敲打和練習。

個人學習方法,僅供參考。


其實C++的很多特性與用法,即使你是工程經驗豐富的老手,你也未必想到,更甭提去使用。

舉個黎姿:

類成員函數可以是volatile修飾的。 C++語法告訴我們:volatile的類對象,只能調用volatile修飾的類成員函數。同樣,const的類對象,只能調用const修飾的類成員函數。它到底有什麼用處?網上有位加拿大人寫了一篇文章(有中譯本),寫了這種volatile修飾的類成員函數用於並發編程:

被並發訪問的數據對象,應該寫成volatile;如果一個線程進入了critical region獲得了獨佔訪問權,那麼這個volatile對象就可以通過const_cast變成一個普通對象,然後可以訪問它的一切成員函數;而在臨界區以外的線程,對這個volatile對象還可以調用它的volatile修飾的類成員函數,因為這種volatile成員函數的語義就是編程者保證了它是並發安全的(例如,你可以用原子操作)。C++的上述語法特性,在編譯時就能檢查出你是否誤寫了volatile對象調用了普通(非volatile)的成員函數。

如果你是一位C++高手,這樣的知識點也是需要不斷學習。不可能讀完《C++ Primer》就差不多該會的都會了。

我建議的學習辦法是:

首先,找一本公認的簡明準確的tutorial,最好百頁以內,最多不要過200頁,讀完之後你就可以上手寫程序幹活了。

其次,有了一定的實踐經驗,能主動使用類、繼承、虛繼承、模板、STL的主要容器與演算法之後,可以開始讀&或&,建議讀原版,英文都很淺顯。理解不能的句子再翻看中文版對照。這一步可以覆蓋C++主要知識點,比你零打碎敲的積累要系統全面得多

再次,必須讀&、&、&這幾本書。其實這一步的公認好書還有好多,但這三本書你應該首先看。

之後,C++各種公認的奇技淫巧的好書還有很多,特別是與模板元編程有關的。

成了C++高手之後,繼續學習不斷更新知識與技能,也是要永遠與時繼進。不然,停留在C++98或者C++03的高手,在我看來還是有很大遺憾與有點可悲。


暑假正在啃《c++primer》

想把遇到的有疑惑的東西私信給你們這些答題的人

你們別打我~


已經過去了兩年的樣子

想知道提問者現況如何了

學的怎麼樣


以前看第一遍看得很粗,現在重新仔細的再刷一遍,順便做筆記

c++ - yanglusheng的專欄


1~第六章複習函數 然後第七章類和友元拷貝構造什麼的。然後第13-14-15看完

2~容器和迭代器以及泛型演算法。具體為第3

-9-10-11順便把12看了

3~模板

4~剩下的慢慢來吧


這個不是讓你入門的,是用來深入理解c++的,入門請百度1小時學會c++,c++對底層理解要求太高,學了操作系統才大概了解c++的內存模型。新手搞項目用Java和c#。

讓新手修bug,你們這項目要完。


建議 可以 先找本國內的 c++ 快速的 看一遍 基本都懂了之後(細節上不會寫的 詳細) 。再看 primer . (這本書 相當於字典)

有時候 別太摳細節


寫了兩年的http://vb.net。現在入手學習C++,又給建議的不


推薦閱讀:

C++ 中的「移動」在內存或者寄存器中的操作是什麼,為什麼就比拷貝賦值性能高呢?
c++ 內聯成員函數問題?
如何理解c++primer中關於auto的說明?
新手如何閱讀《C++ Primer》?
string頭文件和string.h頭文件是一樣的?

TAG:C | CPrimer |