C++初阶-STL简介
目录
1.什么是STL
2.STL的版本
3.STL的六大组件
4.STL的重要性
4.1在笔试中
4.2在面试中
4.3.在公司中
5.如何学习STL
6.总结和之后的规划
1.什么是STL
STL(standard template library-标准模板库);是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。
用简单易懂的话来说就是用模板实现数据结构和算法的库,我们在之前讲了顺序表、链表、二叉树等数据结构,这个库里面都包含,所以我们现在用STL就可以不用自己写数据结构和算法了,这样简化了我们的时间。
2.STL的版本
原始版本
Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许
任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原
始版本一样做开源使用。 HP 版本--所有STL实现版本的始祖。不是C++始祖(始祖你猜,之后面试可能要考,如果不知道了就去找吧(doge))开发的。
首先我们需要了解一下开源和闭源,开源即开放源代码,这是一个很好的精神,免费的使用,但是这个版本规定如果你做了有效的修改你也需要进行开源,公布自己改变的地方!而闭源就不一样了,不能修改。开源和闭源都有各自的好处,开源虽然看似很好,但是可维护性不强,之后没有多少人会去维护的,但是闭源就有人来维护了。
P. J. 版本
由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。
RW版本
由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一
般。
SGI版本
由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版本。被GCC(Linux)采用,可
移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习
STL要阅读部分源代码,主要参考的就是这个版本。
我们常用的git/Liunx都是开源的,而Windows、mac、os都是闭源的。
3.STL的六大组件
空间适配器里面的allocator就是内存池,其中我们主要注意的是算法和容器(现阶段),因为容器涉及到数据结构的知识等等,而算法就涉及到我们之前的排序等等算法,总之注意的就是这几个。
4.STL的重要性
4.1在笔试中
(1)二叉树的层序打印
题目链接:把二叉树打印成多行_牛客题霸_牛客网
这些题目我们现在是不会做的(虽然之前写过),但是之后学完STL就会了。
(2)重建二叉树
题目链接:重建二叉树_牛客题霸_牛客网
(3)用两个栈实现一个队列
题目链接:用两个栈实现队列_牛客题霸_牛客网
这些之前我们基本上写过,但是都要把数据结构的基本上所有代码都拷贝过去很麻烦,但是现在我们学了C++中的STL后就会好一些了。
4.2在面试中
这里只提供一些面试中的题目,只要知道基本上是什么样就可以了。
4.3.在公司中
网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层
的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。
5.如何学习STL
学STL有三个境界:
第一境界:熟用STL;
第二境界:了解泛型技术的内涵与STL的学理乃至实作;
第三境界:扩充STL。
三个境界的总结就是:能用,明理,能扩展 。我们主要学到第二个境界就可以了,只要前两个境界学得好,第三个境界就没有问题。
为什么我们要扩充STL呢?
有些数据结构和算法在STL中未实现,所以需要扩充。
相当于爬->走->跑。
所以加油吧。
6.总结和之后的规划
STL在我们C++的学习至关重要,所以之后也就需要每一篇博客要听懂,但是更多的是自己能用,而不是简单的看,只能说C++本来是很难的,必须用实际的代码去学C++,和我之前自己写的日期管理系统一样,虽然有些不足,但是也要写出一些成果就可以了!
之后我将从容器的string和vector开始,但是后面又会加一些内容才讲模板进阶,而那些stack和queue的扩展内容可能需要之后再讲,到时候我会发起一项投票,因为到时候我可能需要学Liunx或者先把C++基本内容学完,所以需要讲C++扩展内容还是Liunx都需要额外的理解的,所以到时候再进行简单的投票吧!反正不会完全按照我的文件中的顺序来进行讲解,所以到时候还需要绕一些额外的知识(这些知识还没学,我也不懂)。
下节将讲解string了,这个string我们主要是学它的成员函数等等,需要进入这个网页:
https://legacy.cplusplus.com/reference/
建议先去学习一下这个文档的使用吧,之后会频繁用到的。
这讲不是来讲解知识的,这讲是为了后面的内容做铺垫的,关于string的内容,我可能需要两篇博客来进行讲解,因为它里面虽然在界面的函数少,但是几乎每一个成员函数都有重载函数,因为它比STL诞生得早,所以封装的函数太多了,但是不是每个函数都要掌握,主要知道一些重要函数的用法就可以了(具体下一节再讲)。string部分需要到4月30日前后才可以更新了哦。