如何正确通过 C++ Primer 学习 C++?

链接:https://www.zhihu.com/question/32087709

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

即将读研,虽然考的是本专业(GIS),但是研究生读的专业在计算机学院,要求所有研究生都要会编程。

本科期间学过C++,但是基本忘的差不多。现在暑假已经被要求到学院搞项目,但是因为对编程只有概念上的认识,所以现在都是在自学C++。

这几天开始从头看C++ primer,但是因为基础实在薄弱,很多内容看很久都看不懂,上网查资料也是一片模糊。看了几天之后,觉得我学习的方法有问题(我是每天都在练习他的习题)。

我知道学习程序语言要多敲代码,但是这个敲代码不知道从哪里入手,看书也不知道哪些是重点,哪些现在可以不看的。完全没有一个详细的规划,很乱。求大神给些意见!

相信也有其他小伙伴有类似疑惑,特此摘录了一些小伙伴的回答,以供参考!

作者:dawnmist
https://www.zhihu.com/question/32087709/answer/54936403

个人经验,C++ primer 第一次可以跳着看。关键是要尽快用起来,在使用中熟练,而不是在细节中迷失。

以C++ Primer第五版为例,第一遍读的时候:

Part1也就是前七章,除了6.6,6.7节,都要通读。尤其是第三章初步介绍了vector和string,简直就是新手福音,搞定这两个容器就能写一些简单的程序。
Part2基本就是数据结构和算法,如果有基础读起来很轻松。

9,11两章介绍的容器,以及12.1节的智能指针要通读。多用智能指针和容器,远离segment fault. 第10章里的泛型算法可以慢慢读,读完以后可以写出高逼格的函数式风格C++。12.2节讲了怎么用new和delete分配空间,题主作为新手,知道这种写法就行,写程序时尽量用容器代替原始数组,尤其是代码里最好不要有delete。
Part3是块硬骨头,标题就是Tools for Class Authors. 作为一个"class user",有些部分第一次是可以略过的。
13章很重要,要细读。初始化,复制,赋值,右值引用是C++里很微妙很重要的部分,别的语言对于这些概念很少有区分得这么细的。这一章不但要精读,还要完全掌握。
14章的操作符重载第一次可以观其大略;14.9节第一次可以跳过。
15章讲OOP,重要性不言而喻。如果之前一点概念都没有,学起来会觉得比较抽象。网上关于OOP有很多通俗有趣的文章,可以一起看看。
16章讲泛型编程,第一次读16.1节,掌握最基本的函数模板和类模板就行了。
Part4就更高档了,很多内容第一次就算啃下来,长久不用又忘了。第一次读推荐把18.2节读懂,命名空间简单易用效果好。别的内容可以观其大略,用时再看。17.1节的tuple是个有趣的东东,可以读一读。17.3节的正则表达式和17.4节的随机数也许有用,也可以读一读。如果需要读写文件,要读一下17.5.2节的raw I/O和17.5.3节的random I/O。

最后给题主的建议是,写C++,要尽量避免C的写法。用static_cast而不是括号转换符;用vector而不是C里面的数组;用string而不是char *;用智能指针而不是原始指针。当然I/O是个例外,printf()还是比cout好用的;转换数字和字符串时sprintf()也比stringstream快

作者:vczh
https://www.zhihu.com/question/32087709/answer/977501204

c++primer就是用来给你学习语法的,然后你就找点什么来做。一般我建议学到指针操作字符串之后,就着手复刻windows记事本。

学编程是一件周期长达10年的事情,早期根本不需要在乎学习效率,只要不断的沉迷于开发软件就可以了,知识自己就回来了。

只有知道为什么野鸡套路不行,你学习正规套路才会掌握得更好。适当走点弯路,提高学习质量

作者:匿名用户
https://www.zhihu.com/question/32087709/answer/55497335

对于工程性、技术性的知识,没有实践的感性认识作为基础,读也读不懂。那么问题来了,没有实践就没法读懂,没法读懂自然也就没法去做正确且高质量的实践,问题似乎进入了一个死循环。

学习东西最怕不知道学的东西有什么用处,只要是这样,多半会半途而废。而个问题的深层次原因就是上面说的。

要想打破这个死循环,你唯一能做的就是调整心态,然后读一点就实践一点,一点一点的往前挪。这是学习任何新知识所必需的“痛苦”经历。在这里我给你几点建议,帮助你尽可能的减轻“痛苦”,让你起码能有一个开始:

1.第一遍要通读,而且可以不求甚解,但必须读的有速度,不要在不懂的地方过多的停留,不要试图在第一遍的时候就搞懂所有细节。假如读到后面需要前面的知识,但是又忘记了,可回头看,也可不回看。很多人想用c++ primer学习c++,但是第一遍都没读完就放弃了。

2.接上条。读第一遍的目的是让你知道c++都有什么东西,先混个脸熟,等日后见到一些比较高级的特性心里不会发慌。

3.调整心态,不要急于求成,除非你已经拥有了丰富的编程经验,否则一个假期不可能到达熟练掌握c++的程度。要认清这一点,遇到挫折了不要怀疑自己,大家都是这么过来的。

4.c++不是一门可以边学边干的语言,里面坑很多,要是一知半解就去用,很可能掉坑里了还不知道。

5.如果觉得c++ primer太厚,可以读读作者写的另外一本:Essential C++ (豆瓣)。

6.关于书上的习题,第一遍看的时候可以不做。原因是做习题就会陷入到细节中,学任何东西过早的陷入细节都不是好事情。凡是过早陷入细节的,很少有能坚持到最后的。

作者:dabbler0606
https://www.zhihu.com/question/32087709/answer/54871907

首先,看c++primer
一定要看第5版

1.从头开始看,别跳
c++11穿插在书的每一个角落,跳到后面你可能看到新标准又返回来看.
而且这种经典书看几遍每次也会有新收获

2.课后习题一定要做
课后习题才是查露补缺.一定要做,做题和不做差别太大了,而且课后很多经典题

3.最好记笔记,这种大部头不能保证所有都常用,所以有些会忘的很快..记了笔记可以快速记忆起来自己看的

以上是我看完c++primer第4版没做习题和第5版做完课后习题的感受
这么做比较费时间,但是c++语法层应该没问题了。
习题答案github有很多

作者:Godbird
https://www.zhihu.com/question/32087709/answer/147704354

老实说,我觉得如果你真的一点编程经验都没有完全从零开始的话,C++ Primer的Primer一词对你来说可能并不适用。这本书其实还是有一些门槛的,只是相对于其它比如Inside C++Object Model,Effective C++,Exceptional C++甚至The C++ Programming Language这些书来说门槛要低那么一点。

所以,如果你是科班出身,大可以不紧不慢的在大学里学完C++的课程再来看这本书。可以加深你对C++的认识,如果你直接就入门这本书学编程,其实我并不推荐。

另外这本书真的很实用,很多技巧是工作中马上就能用到的,所以无论你做什么行业,只要用C++开发程序,这本书我认为无论如何都是值得一看的。


作者:南边的风
https://www.zhihu.com/question/32087709/answer/54907249

我C++ Primer Plus和C++ Primer 都看过,我还是比较喜欢C++ Primer Plus的风格,可能由于是从C Primer Plus看过来的,网上有每个实例的完整代码,边调试边看书会效果比较好。

C++ Primer相对 C++ Primer Plus要抽象一点,也更深一点,但是缺少完整的实例工程,学起来不是很好,个人建议先看C++ Primer Plus,把每个实例调试一遍,实践出来的效果更好,C++ Primer就当做是工具书吧,有疑惑的时候再翻翻。C++ 过于庞大,一定要有实际的工程代码才能理解的比较好。例如opencv是C++写的计算机视觉库,拿几个工程来练练手,看opencv函数的实现细节,几个工程下来,C++会进步不少的!

作者:胖子许木木
https://www.zhihu.com/question/32087709/answer/980134433

编程是理论+实践相结合的活,二者缺一不可

《C++ Primer》里面没有非常高深的理论,全是基本语法,以普通人的智商学起来不难,半年怎么也够了。但为什么很多人学完《C++ Primer》还是什么都做不了。

真的是C++的锅么?不是的,是因为C++涉及的应用面太广,例如:

  • RPC网络开发 (grpc, Nginx, baidu-rpc)

  • 数据库开发 (LevelDB, RocksDB, MySQL, MongoDB, Redis)

  • 多媒体开发 (FFmpeg, imageMagick)

  • 人工智能开发 (Tensorflow, Caffe2, MXNet, PaddlePaddle)

  • 编译或解释器开发 (V8, HHVM)

  • 游戏或渲染引擎开发 (Webkit引擎)

  • 桌面开发(GUI)

  • 驱动设备开发

上面列出来的每一个方向都涉及到两项基础知识的储备

  • 操作系统

  • 数据结构和算法

这两项知识有必读的几本书:

  • 《深入理解计算机系统》

  • 《现代操作系统》

  • 《UNIX环境高级编程》

  • 《算法》

  • 《算法导论》

以上均是理论,平均每本书都是600页+, 五本3000页,加上《C++ Primer》3600页绰绰有余。

怎么实践这两项基本知识呢:

  • 数据结构和算法:边看书边刷LeetCode,还能锻炼C++基本语法,额外多想一下是否线程安全?

  • 操作系统方面:找准某个方向,先熟悉开源软件如何用,再看看有哪些功能,根据功能造轮子。

怎么造轮子呢,首先看下企业内部简化版研发流程:

需求提出----->系统设计-----> 开发-----> 测试----->部署

对应自己造轮子的时候:

  • 系统设计可能会缺少,因为大多数初学者没什么设计能力,能实现就不错了

  • 部署会缺少,轮子嘛,肯定不是非常完备,自己玩玩就行了

  • 测试会缺少一部分,能把单测写了就不错了

那最后只剩下需求提出和研发:

需求提出是需要细化的,空想是想不出来的?想不出来需求,就得先把开源软件用熟悉了,看看有哪些功能,记下来,拆解开,一旦功能拆解清楚,研发其实是相对简单了。

总之学习C++需要理论和实践相辅相成。3600页的理论+实践,没两年下不来,何况这些书不是一遍能过,至少得3遍,需做好长期准备。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 mthler」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

  • 25
    点赞
  • 141
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值