该如何有效的提高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
该如何有效的提高C/C++语言编程能力的更多相关文章
- 【ZZ】编程能力层次模型
http://blog.csdn.net/shendl/article/details/43835421 前言 程序员的编程技能随着经验的积累,会逐步提高.我认为编程能力可以分为一些层次. 下面通过两 ...
- 华为C语言编程规范
DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...
- c语言编程实例——小球跳动
1.预备知识 1.1 相关头文件 "#include"是c语言中用以申明所需调用的库函数或自定义函数的头文件路径及文件名.#include ""和#includ ...
- R语言编程艺术(3)R语言编程基础
本文对应<R语言编程艺术> 第7章:R语言编程结构: 第9章:面向对象的编程: 第13章:调试 ============================================== ...
- R语言编程艺术(2)R中的数据结构
本文对应<R语言编程艺术>第2章:向量:第3章:矩阵和数组:第4章:列表:第5章:数据框:第6章:因子和表 ======================================== ...
- R语言编程艺术(1)快速入门
这本书与手上其他的R语言参考书不同,主要从编程角度阐释R语言,而不是从统计角度.因为之前并没有深刻考虑这些,因此写出的代码往往是一条条命令的集合,并不像是“程序”,因此,希望通过学习这本书,能提高编程 ...
- C语言编程规范
C语言编程规范 6 函数与过程 6.1 函数的功能与规模设计 函数应当短而精美,而且只做一件事.不要设计多用途面面俱到的函数,多功能集于一身的函数,很可能使函数的理解.测试.维护等变得困难. 6.2 ...
- C语言编程规范试题(标准答案)
C语言编程规范试题(标准答案) 一.单选题(每小题3分,共20小题60分) 1.1-1.5 B D A C B 1.6-1.10 C A D B C 1.11 ...
- C语言编程规范试题
C语言编程规范试题 [说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC ...
随机推荐
- 企业快速开发平台Spring Cloud+Spring Boot+Mybatis+ElementUI 实现前后端分离
鸿鹄云架构一系统管理平台 鸿鹄云架构[系统管理平台]使用J2EE技术来实施,是一个大型分布式的面向服务的JavaEE体系快速研发平台,基于模块化.服务化.原子化.热部署的设计思想,使用成熟领先的无商业 ...
- [第十三篇]——Docker Compose之Spring Cloud直播商城 b2b2c电子商务技术总结
Docker Compose Compose 简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务.然 ...
- AES加密基本原理图解
AES加密 Fright-Moch整理 AES简介 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的).对 ...
- Java大数操作
Java的Math包中提供了两个类用于对大数进行操作: BigInteger类,用于大整数的操作 BigDecimal类,用于大的小数操作 BigInteger类 Java中的基本类型中,表示整数的有 ...
- PHP中的PDO操作学习(二)预处理语句及事务
今天这篇文章,我们来简单的学习一下 PDO 中的预处理语句以及事务的使用,它们都是在 PDO 对象下的操作,而且并不复杂,简单的应用都能很容易地实现.只不过大部分情况下,大家都在使用框架,手写的机会非 ...
- goto语法在PHP中的使用
在C++.Java及很多语言中,都存在着一个神奇的语法,就是goto.顾名思义,它的使用是直接去到某个地方.从来代码的角度来说,也就是直接跳转到指定的地方.我们的PHP中也有这个功能,我们先来看看它是 ...
- 环形链表II
题目描述: 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 p ...
- mysql 不常用的存储引擎
csv 数据文件可以编辑;每一列不能为空,不支持索引:文件保存数据,cat可以查看数据;用处:数据交换中间表--excel表导入数据等; Archive 对表数据进行压缩,磁盘i/o减少:节省空间;只 ...
- urllib2获取CGI请求的数据
import urllib.request as urllib2 headers = { 'Authorization': 'Basic YWRtaW46YWRtaW4=', }#需要身份验证时,在请 ...
- AT4353-[ARC101D]Robots and Exits【LIS】
正题 题目链接:https://www.luogu.com.cn/problem/AT4353 题目大意 数轴上有\(n\)个球\(m\)个洞,每次可以将所有球左移或者右移,球到洞的位置会掉下去. 求 ...