专栏首页嵌入式单片机该如何有效的提高C/C++语言编程能力

该如何有效的提高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

原文链接:https://www.cnblogs.com/923327iu/p/11995141.html

相关文章

  • 六步教你如何用PADS进行PCB设计?

      在使用PADS进行PCB设计的过程中,需要对印制板的设计流程以及相关的注意事项进行重点关注,这样才能更好的为工作组中的设计人员提供系统的设计规范,同时也方便...

    用户6754675
  • 硬件工程师离不开的那些电路设计工具,你会有几个呢

      EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的 最新成果,进行电...

    用户6754675
  • 单片机stm32零基础入门之--初识STM32 标准库

      因为基于Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片...

    用户6754675
  • 数据结构与算法分析C++描述

    本书采用当前流行的面向对象的C++程序设计语言来描述数据结构和算法, 因为C++语言是程序员最广泛使用的语言。因此, 程序员可以把本书中的许多算法直接应用于将来...

    用户3157710
  • 10个经典的Java面试题集合

    概述:还在做无准备的面试吗?还在为找不到Java的面试题而苦恼吗?那么你就一定不能错过以下小编为你量身打造的Java面试题集合了!让我们一起来看看 这里有10个...

    非著名程序员
  • 欧拉定理——数论定理

    在数论中,欧拉定理也叫费马-欧拉定理,是一个关于同余的性质,欧拉定理表明,若n,a为整数,且n,a互质,则

    用户2965768
  • 一份来自亚马逊工程师的Google面试指南,GitHub收获9.8万星,已翻译成中文

    一位从1997年就入行的Web工程师,立志要成为Google软件工程师,3年前写下了一篇超完整学习和面试教程,以此作为自己的奋斗计划。

    量子位
  • 从指纹到人脸,支付宝的正确「打开方式」到底安全在哪

    1 月 13 日,在浙江卫视播出的大型科技综艺节目《智造将来》中,代表支付宝最新研发进展的生物识别系统「310099」首次亮相,并成功完成挑战:从 500 位蒙...

    机器之心
  • CSS3过渡,不再为JS动画而犯愁

    HTML5学堂:在页面开发中经常会借助JS来书写大量的特效,以获得较好的页面感官效果。但是真正到了使用JS来操作的时候,往往会因为思维逻辑不清晰而显得很凌乱。同...

    HTML5学堂
  • openldap介绍和使用

    早期,公司是没有统一认证这个东西的,所以各自玩各自的。于是, confluence一个用户体系,gitlab一个用户体系,Jenkins一个用户体系等等, 开发...

    Ryan-Miao

扫码关注云+社区

领取腾讯云代金券