C++学习路线分享

news2024/11/25 12:42:55

我上大学学的第一门编程语言便是C++,靠着那本饱受诟病的谭浩强版的教材度过了大一上学期。学的内容现在看来相当之浅,如果没记错的话只学了个基本的语法,考试的时候考一些冒泡,快排之类的东西就结束了。感觉那些有计算机教育背景的学生学过的第一门语言大多数应该也都是C/C++。因为C++真的太适合入门了,这句话我相信当你学完C++第一次去碰其他编程语言的时候最能体会其中含义。

之后两年靠着数据结构,离散数学的一些小作业也算是一直练习着C++,但是这种练习真的只是练习,单纯拿起工具办事的那种,没有任何技术上的提高。后来又学习了Java和python,C++就渐渐被放在了一边,毕竟,工具也分好用和不好用。

工作之后,其实算是有点被迫,又开始捡起放在角落里的C++。靠着《C++ primer Plus》的前六章复习了一遍基本语法之后,发现还是看不懂项目代码。那段时间真的很焦虑。看到不懂的就查,看到不懂的就问,发现几乎还是无济于事。学校里学的那点东西实在是难以解决工作上遇到的困难。后来靠着师傅的帮助,硬着头皮顶上去才勉勉强强完成第一个开发任务。但是说实话,即便是当时完成了任务,很多东西很多语法我其实还是不懂。

项目完成之后有一小段空档期,我便到github上去找C++相关的资料(对,github有时候不仅仅是代码仓库),然后查到了侯捷老师的C++面向对象系列的视频,只能说这个课程真的非常适合当时的我:了解一些基本语法,但是不知道项目代码怎么写。看完之后收货颇多,可以说几乎解决了我百分之八十的问题,以至于我对侯捷老师的印象一直非常好。

再后来就继续啃那本《C++ Primer Plus》。也尝试过通过B站看视频学习,但是总是看完一个系列课程的前一两个课程就不想看了,因为觉得太啰嗦,属实浪费时间。B站这方面的视频有很多,但是几乎一大半都是面向新手的,所谓的零基础入门,我几乎再也没遇见过像侯捷那种质量的课程。这让我后来再去学习一些东西的时候开始偏向通过文字去学习,而不是视频。文字的话你可以迅速筛选你需要的内容,但是视频就不行,时间成本太高,没那个精力去快进着看。

这里推荐一些我个人觉得如果你想要学习C++,比较有价值阅读的一些书:

  1. 《C++ Primer Plus》: 这本可以说是最适合入门的一本书了,其含金量不必多说,系统,全面。如果是刚入门的话,不建议死扣,感觉别扭的地方先跳过去就行。我在第二次读的时候发现这本书里有多处错误,且这些错误多是由于翻译造成的,也有的是原书明明没有这些内容,译者夹带私货,结果搞出来个四不像,弄得读者一头雾水。

都是第六版,原版书籍明明没有右边红色选框中的内容,中文版却硬生生多了这么一段明显错误的内容。

2.《C++ Primer》: 这里有个误区,别看这两本书的名字这么像,实际上二者几乎没有任何联系,且它们的定位都是基础入门类的书,与上面那本书不同的是,这本书的阅读门槛明显高于Primer Plus,适合有一定基础的人阅读而非零基础上来就啃,不妨看完上面那本再来读这本。

3.《C++ 标准库》&& 《STL 源码剖析》: 其实读完前面三本,你对C++应该已经有一个比较全面的认识了,正如《Effective C++》的第一个条款所言,视C++为一个语言联邦,标准模板库应该是你想要深入学习C++的一段必经之路,前人的智慧不可小觑,有时候你想要实现的功能可能已经在标准库里实现了,而你需要做的仅仅是拿来就用,而非自己再动手写一个辅助你编程的工具库,不但浪费时间,而且效率大概率比不上标准库中的实现。

如果你想继续在基础部分深耕的话,还有很多比较系统的剖析C++某些领域的书,比如讲泛型编程的《C++ Template》,讲内存模型的《深度探索C++对象模型》,讲并发编程的《C++并发编程实践》,还有一本很有意思的关于模板元编程的书,书名我忘了,(不过应该容易找到,因为我记得当时专门找剖析模板元编程的书时,只找到了那一本),这些书都是比较系统全面介绍某个C++编程领域的专业书籍,有余力的话可以深入了解。

读完上面那些,基础语法部分应该已经非常扎实了,剩下的就是走出新手村,探索世界了。

  1. 《Effective C++》: 经典书籍,可读性高,真真切切能够帮助你提升编码水平的书。

《More Effective C++》:这本书我个人感觉质量没有上一本书那么高,很多条款写的有点啰嗦,但是瑕不掩瑜,仍旧值得一看。

  1. 《Effective Modern C++》: 跟前面两本一样,同一个系列的书,很不错。

6.《现代C++语言核心特性解析》&&《C++ Core Guidelines 解析》: 书名很像,区别是前面那本是国人写的(写的还不错,很详细,读起来也不费力),后面那本则是一本非常优秀的现代C++教程。

C++11这个版本相较于C++98可以说是巨变,也可以说是现代C++的里程碑。之后出了更为成熟的C++14,再之后每三年出一个版本,时至今日,最新版的已是C++23,C++26的时间表也已经发布。版本出了这么多,一方面说明其背后的开发者数量不容小觑,一方面也展现出了C++旺盛的生命力,作为一名专业的C++程序员,你也可以时刻关注C++的最新动态。

以上便是我个人学习C++的路线。其实本来我对C++是没有任何喜欢可言的,作为一门编程语言,它对使用者的个人素养要求颇高,大把大把的时间精力砸进去可能也溅不起一点浪花,但是不知从什么时候开始,突然觉得没那么难了。不过难是不难了,坑还是有很多没有填,技术债还是欠下不少。

如果你是刚入门的一名程序员,刚开始的时候一定纠结过怎么去点你的技能树,究竟是深度优先还是广度优先?因为点开这个技能,很有可能需要花费掉你不少的“天赋点”,甚至你用这些“天赋点”再去点开几个新技能都绰绰有余,所以,学习C++,三思而后行。

任何一门编程语言说白了都只是一种工具,是我们与计算机交流的一种方式,而并不是编程本身。不要过高的注重编程语言本身。如果非要选择一个的话,我觉得职业生涯前期,广度优先收益更大。

编程是一门技艺。简单地说,就是让计算机做你想让它做的事情。作为一名程序员,你既在倾听,又在献策;既是传译,又行独裁;

编程是一项艰难的工作。想帮你的人可不少——工具供应商在吹嘘他们家产品所创造出的奇迹,方法论大师承诺他们的技术可以为结果做出保证,每个人都声称他们用的编程语言是最好的,每个操作系统都自诩包治百病。当然,没有最好的解决方案,无论是工具、语言还是操作系统;只在特定的环境下才有所谓更合适的系统。

调整方法去适应当前的情况和环境。对所有影响项目因素的相对重要性做出判断,并通过经验找到适当的解决方案。随着工作的进展,你要不断地这样做。

你不应该拘泥于任何特定的技术,而应该拥有足够广泛的背景和经验基础,以便在特定的情况下选择合适的解决方案。你的背景来自对计算机科学基本原理的理解,而你的经验来自广泛的实际项目。理论结合实践会让你变得强大。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2061420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题

解决Qt多线程中fromRawData函数生成的QByteArray数据不一致问题 目录 🔔 问题背景📄 问题代码❓ 问题描述🩺 问题分析✔ 解决方案 🔔 问题背景 在开发一个使用Qt框架的多线程应用程序时,我们遇到了一个棘手的问题&…

【Linux】生产消费模型实践 --- 基于信号量的环形队列

你送出去的每颗糖都去了该去的地方, 其实地球是圆的, 你做的好事终会回到你身上。 --- 何炅 --- 基于信号量的环形队列 1 信号量2 框架构建3 代码实现4 测试运行 1 信号量 信号量本质是一个计数器,可以在初始化时对设置资源数量&#xf…

数据结构——链式队列和循环队列

目录 引言 队列的定义 队列的分类 1.单链表实现 2.数组实现 队列的功能 队列的声明 1.链式队列 2.循环队列 队列的功能实现 1.队列初始化 (1)链式队列 (2)循环队列 (3)复杂度分析 2.判断队列是否为空 (1)链式队列 (2)循环队列 (3)复杂度分析 3.判断队列是否…

91. UE5 RPG 实现拖拽装配技能以及解除委托的绑定

在上一篇文章里,实现了通过选中技能,然后点击下方的装备技能插槽实现了技能的装配。为了丰富技能装配功能,在这一篇里,我们实现一下通过拖拽技能,实现拖拽功能,我们需要修改两个用户控件,一个就…

鸿蒙内核源码分析(信号生产篇) | 注意结构体的名字和作用.

信号生产 关于信号篇&#xff0c;本只想写一篇&#xff0c;但发现把它想简单了&#xff0c;内容不多&#xff0c;难度极大.整理了好长时间&#xff0c;理解了为何<<深入理解linux内核>>要单独为它开一章&#xff0c;原因有二 信号相关的结构体多&#xff0c;而且…

RTC碰到LXTAL低频晶振停振怎么办?

GD32F303的RTC模块框图如下图所示&#xff0c;RTC时钟源可选择HXTAL/128、LXTAL或IRC40K&#xff0c;一般为了实现更精准的RTC时间&#xff0c;MCU系统均会外挂32.768KHz LXTAL低频晶振&#xff0c;但由于低频晶振负阻抗较大&#xff0c;不容易起振&#xff0c;若外部电路布线、…

vue3 antdv3 去掉Modal的阴影背景,将圆角边框改为直角的显示,看上去不要那么的立体的样式处理。

1、来个没有处理的效果图&#xff1a; 这个有立体的效果&#xff0c;有阴影的效果。 2、要处理一下样式&#xff0c;让这个阴影的效果去掉&#xff1a; 图片的效果不太明显&#xff0c;但是阴影效果确实没有了。 3、代码&#xff1a; /* 去掉遮罩层阴影 */.ant-modal-mask {…

Maven命令传pom或者jar异常

上传命令&#xff1a;mvn deploy:deploy-file -Durlhttp://****&#xff1a;****/repository/chntdrools7741-releases -DrepositoryId**** -DfileD:/tempRepo/org/kie/kie-api-parent/7.69.0.Final/kie-api-parent-7.69.0.Final.pom -DpomFileD:/tempRepo/org/kie/kie-api-par…

三级_网络技术_39_综合题(命令)

一、 如下图所示&#xff0c;某校园网用10Gbps 的POS技术与Internet相连&#xff0c;POS接网的幅格式早SDH。路由协议的选择方案是校园网内部采用OSPF协议&#xff0c;校园网与lntemnet的连接使用静态路由协议。校园网内的路由器R1设为DHCP服务器&#xff0c;可分配的IP地址是…

【22-54】创建者模式(详解五大模式)

目录 一.创建者模式介绍 二.单例设计模式 2.1 单例模式的结构 2.2 单例模式的实现 2.2.1.1 饿汉式-方式1&#xff08;静态变量方式&#xff09; 2.2.1.2 饿汉式-方式2&#xff08;静态代码块方式&#xff09; 2.2.2.1 懒汉式-方式1&#xff08;线程不安全&#xff09; 2…

用手机写一本电子书

第1步、进入Andi.cn网站 第2步、点击登录&#xff0c;注册用户 第3步、点击去创作&#xff0c;进入创作页面 第4步、点击右下角的小笔&#xff0c;写一篇文章 第5步、下翻&#xff0c;点击提交按钮 第6步、再写一篇文章 第7步、点击栏目设计 第8步、进入栏目设计&#xff0c;点…

excel卓越之道笔记

excel快捷键 1.Alt+=一键求和 2.Tab补全函数名称 3.CONCAT可以连选,CONCATENATE只能一个单元格一个单元格点选 4.excel365用不了phonetic函数,但是可以用concat代替 5.textjoin连接标识码,在Arcgis中筛选出所需要素,也是很好用的 6.法1:alt+; 定位可见单元格,复制后只…

Linux入门——01常用命令

0.命令行解释器shell 用户无法直接给操作系统指令&#xff0c;需要经过shell,才能让操作系统明白。如果用户对操作系统非法操作&#xff0c;会有shell保护。shell本身也是一个进程&#xff0c;当然&#xff0c;用户给shell的指令&#xff0c;shell会派生出子进程进行执行&#…

Unity Protobuf3.21.12 GC 问题(反序列化)

背景&#xff1a;Unity接入的是 Google Protobuf 3.21.12 版本&#xff0c;排查下来反序列化过程中的一些GC点&#xff0c;处理了几个严重的&#xff0c;网上也有一些分析&#xff0c;这里就不一一展开&#xff0c;默认读者已经略知一二了。 如果下面有任何问题请评论区留言提…

【Kubernetes中如何对etcd进行备份和还原】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

不同路径

不同路径 思路&#xff1a; 法一&#xff1a;动态规划 const int N 110; class Solution { int dp[N][N];//dp[i][j]&#xff1a;从起点走到 i j的路径个数。 public:int uniquePaths(int m, int n) {for(int i1;i<n;i){dp[1][i]1;} for(int i1;i<m;i) dp[i][1]1;f…

day36.动态规划+重载操作符

动态规划好难啊(ಥ﹏ಥ) 终于搞懂0-1背包问题的二维数组转一维数组优化的问题了。如图所示: 将二维数组转换成一位数组的核心就是&#xff0c;dp[i][j]选取时&#xff0c;他的值只与dp[i-1][j]&#xff0c;也就是上一行有关&#xff0c;所以可以引出使用一维数组代替二维数组…

python 使用宝塔面板在云服务器上搭建 flask

打开宝塔面板到【网站】&#xff0c;选择【python项目】&#xff0c;点【添加python项目】 填上相关信息&#xff1a; 注意&#xff1a;项目端口是你打算在外网用来访问flask的端口号 勾选【放行端口】&#xff0c;并提交 到阿里云里&#xff0c;选择安全组 手动添加放行端口…

datawind可视化查询-其他函数

飞书文档学习链接:https://www.volcengine.com/docs/4726/47275 1. 用户名函数 用户名函数并非 ClickHouse 官方函数,而是与项目用户信息相结合,用于返回当前使用用户的指定信息的函数。 USERNAME()可返回当前用户的用户名,如下所示。该函数也可与其他函数组合使用 2. J…

51 无显式主键时 mysql 增加的 DB_ROW_ID

前言 这里主要是 探讨, 在我们创建了一个 无主键的数据表, 然后 mysql 会为我们增加的这一个 DB_ROW_ID 的相关 新建一个无主键字段的数据表如下 CREATE TABLE implicit_id_table (username varchar(16) DEFAULT NULL,age int(11) DEFAULT NULL ) ENGINEInnoDB DEFAULT CH…