日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 人生如戲ds3xoc 2019-12-06

  很多答案都談到算法的重要性,我的答案主要集中在C++上,只是一些個(gè)人經(jīng)驗(yàn)。

  其實(shí)我以前也有這樣的困惑,感覺完了不知道怎么用。而且我也不是學(xué)計(jì)算機(jī)的,也沒有從事相關(guān)工作,所以大概有十年的時(shí)間都沒寫什么程序。最近因?yàn)橄胱鳇c(diǎn)東西,所以又重新開始寫。

  剛開始用的是python,比較好學(xué)。但是因?yàn)樯窠?jīng)網(wǎng)絡(luò)計(jì)算量太大了,用python效率不太夠。后來用matlab寫,matlab也比較方便,矩陣運(yùn)算優(yōu)化得很好,但是太耗內(nèi)存了,我的破機(jī)器沒法處理那么多數(shù)據(jù)。于是后來就開始用C++。

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

  C++在內(nèi)存管理上有比較大的靈活性,很多時(shí)候程序的效率可以從這里發(fā)掘出來。同樣的算法,因?yàn)榭梢苑奖愕墓芾韮?nèi)存,所以效率會(huì)有很大提高。比如使用指針可以減少不必要的變量復(fù)制,但是指針也容易出問題,所以有些時(shí)候能有替代的,就用替代的,比如傳遞參數(shù)時(shí)可以是引用,遍歷數(shù)組的時(shí)候可以用迭代器等等。這些都可以提高內(nèi)存使用效率,同時(shí)安全性也更高。這樣的問題在python等語言中都是不需要考慮的,因此在大量數(shù)據(jù)和計(jì)算的時(shí)候,python也很難達(dá)到C++的靈活性和效率。

  C++的另外一個(gè)特點(diǎn)是語法特征很豐富。因?yàn)楹茇S富所以也很容易搞錯(cuò)。我自己給自己設(shè)定的原則是,如果有簡單的特征就不用復(fù)雜的特征。比如我很少會(huì)用到面向?qū)ο蟮睦^承,因?yàn)槔^承往往會(huì)讓類的層級(jí)變得很復(fù)雜,這時(shí)候如果用模板或者友元可以簡化問題,那就不用復(fù)雜的。不僅是功能要解耦,還要數(shù)據(jù)類型和算法盡可能分離開,設(shè)計(jì)好接口,無論使用C++中哪種范式的語言特征都應(yīng)該以這個(gè)為目標(biāo)。

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

  另外,算法雖然很重要,但是很多實(shí)際項(xiàng)目中,算法基本是固定的。再比如大規(guī)模計(jì)算時(shí),要使用到GPU,很多精妙的算法完全用不上,反而越簡單的算法越容易并行化。

  所以我感覺,學(xué)習(xí)的重點(diǎn)除了算法,還要注重程序設(shè)計(jì)簡潔清晰,內(nèi)存使用合理,如果有必要還可以針對(duì)具體硬件進(jìn)行優(yōu)化。

  大概就這么多了。。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多