关于我的抉择:C++与算法或者数据结构

看过之前这个寒假的博客的应该知道了,
我在这个寒假里学了点算法,到现在已经快忘完了(只有插入排序还能想起来一点)。
我十分不建议先进行算法的学习,当然对于不同的人有不同的看法,这是我的视角,通过实践的视角。

算法与数据结构为你提供了什么?

我们学习计算机的可能自大一就已经知道了算法与数据结构对于解题以及之后的工作应用都挺重要的。

算法,也就是通常意义上人们对于一个问题的解法,因为一种方法能够解决通常来说难以想出思路的问题,或者它的效率特别的高,所以我们使用算法——我们为的是解决实际问题。实际上,我们平时解决问题的时候,也是在设计算法。我想要输出一行“Hello World”,我知道printf(cin)之后我就使用这个函数来达到了要求,这就是一种算法。数据结构,就是存放数据的结构。它与算法相辅相成,有时算法需要特定的数据结构来实现,有时特定的数据结构便于问题的解决,最终的优势就是能够便利地解决问题。并且,很多平台都针对不同的算法给出了题目的分类,如果你学习了某一个算法,你可能当天就可以将它运用到实操之中,加深印象,而且学习算法能够让你的学习有针对性,还时不时能够让你解出高难度的题,这种学习还是有成就感的。

为啥我不建议?

说实话,学习算法的这些日子里,尽管有上文所说的那些优点,做编程题做得仍然是挺憋屈的,为啥呢?

首先,你学一种算法,只能解决一种问题,你没有办法在洛谷上随机一道题目。

第二,如果你理解不深刻,运用的就十分拙劣。依靠固有的算法写法,到头来也就只是记下来了写法而已,而且十分容易忘记。
然后是理解,深刻的算法有如分治法,涉及到了渐进数学中的知识,描述递归方程的式子也挺复杂的,我们没接触过,理解起来也有困难。
而且所谓的分治法只是一种思维结构,你靠着这个还得自己进行二次设计,最后的算法还得自己想。

第三,并不是所有算法都可以当天实现,除非你的学习资料为你写好了,一些算法甚至无法用程序语言写,一些算法需要你去学习数据结构才能写。

归根到底,算法是死的,实际问题是活泛的,算法是很多零碎的知识,像是可以适用于哪些题目,像是实现方法,都是拼记忆力。

为啥要学习C++

说实话,我刚开始学习C++的时候,也没觉出来C++与C有啥不同,除了面向对象之外也就是把C语言的那些东西用其他的方式又写了一遍嘛。
而且专业名词还要多,啥内联函数,啥引用类型,感觉不太好学的样子。

但是抱着两条路一定得走一条的想法,我就看着网上的C语言教程,一啃就是半个月。
到头来,我基本学习完了C++中的基础概念,然后按照学长的建议,开始学习C++ STL,其实建议很大一部分也是因为这个。
就是因为这半个月以来的努力,我得以开始学习STL,而这已经为我现在的编程学习提供了十足的便利。

STL为我提供了什么呢?

第一,数据结构,你可能知道一道题需要啥数据结构。比如说去重,你可以使用集合,但是自己实现确实不太容易。这时直接使用set即可。
(很多数据结构确实不好实现,如树、映射,表示也挺繁琐)
第二,简便操作,一些数据结构可能原来就有,比如数组、比如字符串,但是STL中的平替物比原来的好用太多,而且用来操作的函数(sort排序、reverse倒序、find查找、count数元素出现几次)不需要自己实现,十分便利,省去了解题时间,而且也减少了错误率,另外遍历在C++14中有很简便的写法(如下)。

1
2
3
4
//设想你有一个数组,或者字符串等等,名字叫做a
for(auto &ele : a)
cout << ele << endl;
//ele是你对输出元素的命名,不重要

另外,C++中新增的数学函数以及语言特性(比如说cin不必管缓冲区的事情,cout不需要有格式化符)都提供了很大的便利,
使用这种语言我认为是更适合于现在即将参加蓝桥杯的局势的。

最后,选择这件事是看自己的感受的,不是盲从其他人,希望看过这篇文章的你能够根据自己的情况选择。
提醒你一下,C++虽然明面上和C差不多,但是还是有很大的区别的,学完类、学完重载你就知道了。

End…

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2023-2024 大学生暮暖
  • 访问人数: | 浏览次数:

请我喝杯奶茶吧~

支付宝
微信