寒假四個禮拜學了c++哪些東西
參考Accelerated C++ Practical Programming by example(ACPP),會找這本書,是因為剛放寒假的時候上Amazon找C++的書、看書評,剛好在Thinking in C++的第一個書評,那個人講他學習C++的過程,並建議先看ACPP(top→down)再看Thinking in C++(down→top),以獲得足夠全面的理解,然後剛好學校圖書館有ACPP,我就借來看了,看了之後覺得讀起來很流暢就這樣繼續下去了
目前讀到Ch11 define ADT,但是還沒寫過template function、定義一個class(含一些member function)來解決問題,前幾章本來都是練書上的習題,可是後來發現它們實在難以引起我興趣,我就改寫uva online judge上的題目,從這網站上的一顆星問題開始(後來發現另一個網站有更詳細的難度分級、而且有中文翻譯),用到「string、vector、還有它們的一些member function、iterator、ch6講到的一些常用的stl facilities、ch7講到的map、上社團問人得知的stringstream」,我後兩個禮拜讀的進度很少,以寫程式練習為主
可能因為目前遭遇的問題還不足以需要用到template function、定義一個好用的class,所以練到的C++部分都侷限在上面「」裡的東西,可以說我這四個禮拜主要花在熟悉C++的一些內建facilities上了,還有累積一點寫程式、debug經驗
學到目前為止對C++的印象,比起C,應該就是可以用的內建facilities很多、很好用吧(可能跟讀的書是ACPP有關),像vector有很多member function,size(), begin(), end(), push_back()...,比起那時候學C,只有很陽春的array,這在解一些之前用C寫過的問題時感受特別明顯,那時寫很久、不然就是很冗長、還常常寫不出來,不過這可能是因為C是我第一個學的程式語言&&當時不夠熟悉&&它內建facilities真的比C++少,而C++是我第二個學的程式語言&&我有些寫程式經驗了&&C++的內建facilities較多
先讀ACPP的其中一個好處,就是會在前幾章就學到standard libraries的許多facilities,足夠讓你解決許多問題(至少那些uva的基本題都能做了),另外就是減少了一些可避免的挫折感,像是Ch 0就講到string,後續兩三章交代完string的基本用法,使用string而不是char array來處理字串真的省去不少麻煩、方便很多
先讀ACPP的其中一個好處,就是會在前幾章就學到standard libraries的許多facilities,足夠讓你解決許多問題(至少那些uva的基本題都能做了),另外就是減少了一些可避免的挫折感,像是Ch 0就講到string,後續兩三章交代完string的基本用法,使用string而不是char array來處理字串真的省去不少麻煩、方便很多
可是ACPP也不是沒有缺點,就是它的學習曲線較陡峭(連結是C++推薦書單),我最近才體會這是什麼意思,Ch8講iterator的種類我第一次看就看的滿霧煞煞,就我目前了解,搞清楚iterators的種類對使用一些C++內建的函數可能很重要,因為parameter有限定要哪一種iterator,另外,如果自己有要寫以iterator為parameter的函數時,那搞清楚各種iterator、還有它們支援的運算當然就是基本的
iterator在ACPP裡第一次出現是在Ch 4的樣子,總之我一開始把它想成跟index類似的某種東西,可以對container的元素修改、存取、還有進階的操作功能,後來在Ch 11 define ADT發現它可能是由指標實踐的
讀的進度會停在Ch 11,很大一部分原因是難懂,藉由仿造stl的vector,講解為什麼要如何如何的定義一個class,之後可能會去參考C++ Primer或Thinking in C++
Object-Oriented據說是C++的精華之一,我距離掌握精髓還很遠,這會是未來幾個月努力的部分之一
Object-Oriented據說是C++的精華之一,我距離掌握精髓還很遠,這會是未來幾個月努力的部分之一
留言
張貼留言