該如何有效的提高C/C++語言編程能力


 

  很多答案都談到算法的重要性,我的答案主要集中在C++上,只是一些個人經驗。

  其實我以前也有這樣的困惑,感覺完了不知道怎么用。而且我也不是學計算機的,也沒有從事相關工作,所以大概有十年的時間都沒寫什么程序。最近因為想做點東西,所以又重新開始寫。

  剛開始用的是python,比較好學。但是因為神經網絡計算量太大了,用python效率不太夠。后來用matlab寫,matlab也比較方便,矩陣運算優化得很好,但是太耗內存了,我的破機器沒法處理那么多數據。於是后來就開始用C++。

  C++是相對而言比較容易出錯,我一般碰到問題就去stackoverflow查查,基本上都能找到答案,如果沒有現成的,就問一下,一般半小時以內就會有人回答,所以總體還是比較方便的。

  C++在內存管理上有比較大的靈活性,很多時候程序的效率可以從這里發掘出來。同樣的算法,因為可以方便的管理內存,所以效率會有很大提高。比如使用指針可以減少不必要的變量復制,但是指針也容易出問題,所以有些時候能有替代的,就用替代的,比如傳遞參數時可以是引用,遍歷數組的時候可以用迭代器等等。這些都可以提高內存使用效率,同時安全性也更高。這樣的問題在python等語言中都是不需要考慮的,因此在大量數據和計算的時候,python也很難達到C++的靈活性和效率。

  C++的另外一個特點是語法特征很豐富。因為很豐富所以也很容易搞錯。我自己給自己設定的原則是,如果有簡單的特征就不用復雜的特征。比如我很少會用到面向對象的繼承,因為繼承往往會讓類的層級變得很復雜,這時候如果用模板或者友元可以簡化問題,那就不用復雜的。不僅是功能要解耦,還要數據類型和算法盡可能分離開,設計好接口,無論使用C++中哪種范式的語言特征都應該以這個為目標。

  光自己寫也不行,還是得看看高手的作品。一般開源項目都比較復雜,水平也參差不齊,文檔也不一定完善。我自己學習的過程中看的是SGI STL的代碼,感覺還是很厲害的。侯捷有本書可以作指引。STL作為一個基礎庫,既要功能強大,又要提高效率,這是多么難的事情。以我這樣的菜鳥水平,只能用大開眼界來形容了吧。

  另外,算法雖然很重要,但是很多實際項目中,算法基本是固定的。再比如大規模計算時,要使用到GPU,很多精妙的算法完全用不上,反而越簡單的算法越容易並行化。

  所以我感覺,學習的重點除了算法,還要注重程序設計簡潔清晰,內存使用合理,如果有必要還可以針對具體硬件進行優化。

  大概就這么多了。。

 

應該如何有效的提升c/c++的編程能力可以參考下下邊的這個詳細的視頻資料作為參考

http://www.makeru.com.cn/live/1392_1166.html?s=45051


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM