写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我
热爱AI、热爱分享、热爱开源
! 这博客是我对学习的一点总结与思考。如果您也对深度学习、机器视觉、算法、Python、C++
感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github
前言:
以前喜欢在笔记本上做笔记,以至于在学习C++、Python的时候做了满满的一本,但是却很少翻看,甚至在用的时候经常“提笔忘词”。所以我从上个月开始转战博客,希望把自己的笔记整理分享出来,正所谓“技术是开源的,知识是共享的!
”
我是在上大二的时候才开始学C++的(相比很多大佬已经很晚了),当时管这门课叫做《面向对象程序设计》,我记得课程结束最后考了将近满分,算是我大学里学的最好的几门课之一了。但是当我后面参加比赛、接触项目时,才体会到“用时方恨少”。所以又陆陆续续的自学了一遍。
这个《C++21天养成计划
》我打算分21天
写完,每天一章。特别适合新手小白,不用担心没有C语言的基础
。虽然C++是从C语言发展而来的,但是C++本身是一个完整的程序设计语言,而且它与C语言的程序设计思想完全不同。我们的学习过程不必严格遵循科学技术的发展进程,只有尽快地掌握最新的理论和技术,才能站在巨人的肩膀上
。那么下面我们就开始进入正题吧!
系列教程,持续更新:
【C++养成计划】不聊学习只谈干活(Day1)
【C++养成计划】基本语法(Day2)
【C++养成计划】深入浅出——变量作用域(Day3)
【C++养成计划】运算符&运算符优先级(Day4)
【C++养成计划】控制程序流程——判断与循环(Day5)
【C++养成计划】深入浅出——函数(Day6)
【C++养成计划】玩转数字——数学运算函数/随机数(Day7)
【C++养成计划】深入数组和字符串(Day8)
【C++养成计划】不得不掌握的——引用(Day9)
【C++养成计划】类与对象 || 构造函数 || 析构函数(Day10)
【C++养成计划】链表 —— 快速上手STL list 类(Day11)
【C++养成计划】栈——快速上手 STL stack 类(Day12)
【C++养成计划】队列 —— 快速上手STL queue类(Day13)
【C++养成计划】动态数组 —— 快速上手 STL vector 类(Day14)
【C++养成计划】字符串——快速上手STL string类(Day15)
【C++养成计划】集合——快速上手STL set (multiset) 类(Day16)
【C++养成计划】映射类——快速上手STL map 和 multimap(Day17)
【C++养成计划】STL算法超全整理!(Day18)
【C++养成计划】STL的三大构成——容器 || 迭代器 || 算法(Day19)
【C++养成计划】面向对象入门——继承(Day20)
1. C++的应用领域
选择一门编程语言是很重要的事情,这大多取决于你以后想要从事的领域。当然,若是兴趣使然或者单纯为了应付考试来学习C++,我觉得也是可以的,毕竟“技多不压身”嘛!
据多方数据显示,C++目前仍然是最受欢迎的编程语言之一。它的应用领域也非常之广,那么C++编程最常用的领域
有哪些呢?
游戏开发
。现在很多游戏客户端都是基于C++开发的,除了一些网页游戏可能不是,所以如果想从事游戏开发行业学好c++是没错的。服务器端开发
。很多互联网公司的后台服务器程序都是基于C++开发的,而且大部分是linux,unix等类似操作系统。如果你想从事这样的工作,你需要熟悉linux操作系统及其在上面的开发,熟悉数据库开发,精通网络编程。数字图像处理
。我用C++做的第一个项目就是有关图像处理的。对于以后想从事图像处理、模式识别、机器视觉的,那么学习C++也是必不可少的。虚拟现实仿真
。我们常说的VR技术,这个也是发展很快的计算机领域,目前各种数字地球,数字城市,虚拟地理环境什么的,出现了这方面的大量应用。网络软件
。C++拥有很多成熟的用于网络通信的库,其中最具有代表性的是跨平台的、重量级的ACE库,该库可以说是C++语言最重要的成果之一,在许多重要的企业、部门甚至是军方都有应用。比如谷歌的chrome浏览器,就是使用C++开发。
当然,C++的应用领域肯定不止上面这些
,但是这也足以说明C++不可替代的地位。如果你有意从事这些领域,那么就开始跟着我一起学习C++吧~
2. 怎样学好C++
我特别喜欢一句话"practice makes perfect
",用我们老祖宗的话来说就是熟能生巧。想要学好一门编程技术,没有捷径可走,只有不停地去练。大家耳熟能详的"一万小时定律
",也就是这个意思。但是这里不需要你花10000个小时,如果你能坚持认认真真的学完100个小时,我相信你已经入门了。
那么这里我也给大家整理了一些常用的刷题和学习网站:
-
力扣。很好的一个刷题练习平台,题量丰富、分类全面、社区活跃。
-
牛客网。互联网人都知道的,这个不解释。
-
C++官方网站。很全面的英文网站。
-
在线编程网站。无需安装编译器,联网即可编译和运行程序,新手可以拿来用。
3. C++简史
C++ 是一种中级编程语言,它最初由 Bjarne Stroustrup 于1979年在贝尔实验室开发,是从C语言发展演变而来的一种面向对象的程序设计方法。因此C++的主要两个特点:一是兼容C
,二是支持面向对象
的方法。
那么,什么是面向对象程序设计
呢?
顾名思义,面向对象程序设计以对象为核心
,认为程序是由一系列对象组成。类是对现实世界的抽象
,包括表示静态属性的数据和对数据的操作(函数)。对象是类的实例化
,对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块。
对于初学者来说,上面这段话可能不太容易理解。很正常,这里我只抛出一个概念,在后面的类与对象
章节我将会具体讲到,所以这里可以选择性跳过
。
由于面向对象方法有很多优点,使得它已经成为开发大型软件时所采用的主要方法
。而C++又是应用最广泛
的面向对象的程序设计语言之一。
她也在不断地成长之中
。最新的C++标准获得了ISO标准委员会的批准,名为C++17。下表就展示了C++的一个发展过程:
4. 编程环境
这里我给大家推荐我学习时所用的两款软件:
(1)Visual Studio Community 2017 (社区版)
这款软件出自微软,是我做工程时常用的一款软件。当然也可以作为C++语言的编译器使用。对于以后想长期从事这方面的开发人员,强烈安利这个软件,而且社区版是免费的,不需要你去破解!记得最好装2017版的,因为之前的版本会不支持C++17新特性。
- 下载与安装:Visual Studio Community 2017
- 打开Visual Studio Community 2017
- 点击文件->新建->项目
- 左侧列表选择C++ Visual ->控制台应用->设置项目名为FirstCpp,项目存放地址通过浏览键选择,最后点击确定。
- 点击已经创建成功的FirstCpp.cpp源文件,输入以下代码,实现第一个C++程序。
- 点击调试运行或者使用快捷键Ctrl + F5,运行第一个C++程序。
(2)Dev-cpp5.4.0
这款软件是一个轻量版的编译器,对于编程小白来说,相比于Visual Studio Community 2017更友好。缺点就是,可能不支持C++11之后的一些新特性。
- 下载与安装:百度云链接, 提取码:4wz0
- 打开Dev-cpp
- 依次点击File->New->Source File
- 输入第一个程序,点击编译与运行,如下图箭头所示:
- 完成第4步后,会出现下面页面。如图所示,先选择文件存放路径,再设置文件名Firstcpp,最后点击保存。
运行成功后就会出现下面结果:
下次再点击编译运行时,就会直接运行了,不用再重新保存文件了。
5. 忆往思今
说好了【C++养成计划】第一天,不聊学习只谈干活的。今天确实没讲学习,只是想带大家对C++有一个简单地认识,从而决定自己是不是真的要学习C++,知识可以后面慢慢分享嘛~。
我一直认为,选择大于努力
。如果你觉得学习它对你有帮助,或者是你职业规划的必备技能,哪怕是为了应付考试,我觉得都有可能成为你学习C++的动力。而当我们选择之后,那么就要持之以恒,切勿半途而废。“锲而不舍,金石可镂
”的道理大家都懂!
而我自己就吃过这方面的亏!
高考完后,听家里人的意见和怀着毕业就进世界五百强公司的憧憬,就选择我们学校最好的材料专业。但是学了快一年,不是很感兴趣,甚至对未来感到迷茫。于是在大一末选择了转专业,考虑到自己喜欢动手(小时候家里的一些电器经常被我拆了,嘿嘿),所以我选择了被称为“万精油”的自动化专业。于是,整个大二我就在拼命补充掉了的课程和填补自己编程方面的不足。还利用课余时间参加了学校的机器人比赛,获得了不错的成绩,经选拔进了学校的机器人实验室。自从大二暑假开始就开始驻扎实验室了。在准备比赛过程中,做的最多还是嵌入式单片机方面的,因为赛题和自身兴趣还接触过传统的机器视觉。
而我现在主要学习的方向是深度学习和机器视觉
。其实这个决定来源于我本科的一次实习经历
。那是一次寒假的时候,因为在家无聊,所以投了一家公司,面试的是图像处理岗位
。一面的时候,面试官(一个小姐姐),熟练地看完我的简历后,问了一下有关项目的问题。然后就直接抛给我了一道题。给了我一堆图片,里面是各种麻将牌,让我对它进行识别和分类。不仅要逻辑推理,还要代码实现。给了我一天时间,让我第二天拿程序来实测。(哈哈,可能考虑到当时我还是个学生)
回家一顿捣鼓之后,我用C++
写了个模板匹配的demo,在家测试还不错,但是精度不高。于是第二天怀着忐忑的心情去测试代码。还是这个小姐姐(后来成为了我的师傅),将我的代码进行了一顿测试,发现还不错,基本功能都能实现,于是就问我原理。然后我也尽可能面面俱到的回答了。当然,最后也是顺利地通过了。
而我后面的实习经历其实就是围绕这个麻将自动分类项目展开的,在刚开始的一周,我一边学习一边尝试各种传统的图像处理方法,但是发现,分类精度仅仅有一点提升,并得不到根本性质上的改变。所以后来,在小姐姐的建议下,开始学习深度学习和机器视觉。于是我又开始恶补深度学习理论和Python的基本语法。经过一个星期学习后,我对深度学习算法有了初步的认识,并用Tensorflow框架
搭建了最简单的手写数字分类识别模型。在这个模型的基础之上,我又搭建了一个四层的卷积神经网络,并运用到麻将分类上。仅仅通过几个小时的训练时间,在测试集上就达到了97%的精确度。当时就感叹,深度学习真牛逼,心里暗暗下定决心读研就要学这个方向。
虽然这个实习时间不长,大约一个月时间,但是收获满满!最重要的是,让我决定从传统的图像处理转变到深度学习和机器视觉领域。
说了这么多,其实就是想告诉大家,选择大于努力 。如果有喜欢的方向和事情,那就赶紧去做吧。越早投入,你就越优秀!
好啦,今天就聊到这里了!想快速入门C++的朋友,欢迎加入这个学习计划,相信你一定会有所收获的!