什么是STL?

描述

大家好,我是情报小哥~

**1、什么是STL **

STL库英文名叫standard template library,标准模板库,并且它属于标准库的一部分,前面小哥跟大家讲解模板的相关知识就是为其进行铺垫的。

STL主要是由一些模板函数和模板类构成的,其包含了C++程序开发中一些非常通用的数据结构实现与算法封装,从而达到了非常良好的软件复用和扩展能力,当然其背后带来的是应用程序开发的高效,你不用再去徒手编辑各种数据结构和算法来使用,其实现的高效和稳定也减少了程序bug。

而对于C语言而言目前暂时没有这样的库,大部分都是各大厂家整理的,或者是一些大牛自己开源的等等,这样就难以形成一个比较好的标准,不太便于程序员代码之间的交流和软件的复用。

STL库既然是一个库就跟标准库一样,如果你觉得方便,或者有这块需求,直接白嫖,如果你觉得STL实现得不够好,或者需改良,也可以自己来编写。

**2、STL的组成 **

对于STL主要分为如下6大组件 :

C++

下面小哥简单的介绍每个组件:

**容器 : **是一些用于存储数据的数据结构,比如链表、队列、栈等等,大部分都是类模板。

**算法 : **也就是我们平时提到的各种算法,比如排序,查找等等,大部分都是一些函数模板,

**迭代器 : **名字看起来比较高大上,其实可以认为它就是一个“智能指针”,用于遍历容器,所以每种容器都有自己的迭代器用来遍历。

**分配器 : **主要是用于辅助容器分配和管理空间。

**仿函数 : ** 主要是与算法结合,因函数指针无法满足C++抽象需求,通过重载操作符(),来实现类似函数调用的过程。

**适配器 : **其名称就可以看出,主要是用于接口的相互转换,从而协调多种端口,容器、仿函数、迭代器都可以与适配器结合,类比电源适配器进行电压转换。

那么下面小哥简单的通过一个图来描述这6大组件之间的关联,以便大家更好的理解。

C++

分配器为容器分配数据空间,而迭代器就是为了遍历容器,算法通过迭代器来访问容器,仿函数使得算法更加的灵活,而这些适配器可以为外界提供新的接口。

**3、STL的容器的使用体验 **

这里通过一个简单的容器操作来体验一下最基础的STL使用:

参考例子:

1#include
2#include
3#include //向量(与数组类似)
4#include //队列
5
6using namespace std;
7
8int main(int argc, char *argv[])
9{
10 //1、向量容器
11 vector vr(5); //通过vertor容器类模板定义一个int类型的向量vr
12
13 cout<<" vr size: "<14
15 for(int Index = 0; Index < vr.size(); Index++)
16 {
17 vr[Index] = Index + 1; //直接以数组方式访问即可
18 cout<<" vr["<"]"<19 }
20
21 //2、队列容器适配器(FIFO--即先进先出)
22 queue qf; //通过queue类模板创建一个队列
23
24 for(int cnt = 0 ;cnt < 5;cnt++)
25 {
26 qf.push((float)cnt+0.1); //进行入队操作
27 cout<<" Queue IN : "<<(float)cnt+0.1<//获得端口数据
28 }
29
30 while(!qf.empty())
31 {
32 cout<<" Queue Out: "<//获得端口数据
33 qf.pop();//进行出队操作
34 }
35
36 return EXIT_SUCCESS;
37}

运行结果:

C++

只需要包含相应的头文件即可使用相应的模板来供应用程序使用,比如例子中使用的队列等,不需要我们像C语言那样再徒手编写队列了,简直不要再方便了~

当然STL库远比上面复杂得多,后面小哥还会为大家慢慢道来~

**最 后 **

这里小哥就介绍了C++中白嫖STL库。本系列文章还会持续更新,以最通俗易懂的方式跟大家谈谈C++,期待您的关注与支持~

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分