大家好,我是情报小哥~
**1、什么是STL **
STL库英文名叫standard template library,标准模板库,并且它属于标准库的一部分,前面小哥跟大家讲解模板的相关知识就是为其进行铺垫的。
STL主要是由一些模板函数和模板类构成的,其包含了C++程序开发中一些非常通用的数据结构实现与算法封装,从而达到了非常良好的软件复用和扩展能力,当然其背后带来的是应用程序开发的高效,你不用再去徒手编辑各种数据结构和算法来使用,其实现的高效和稳定也减少了程序bug。
而对于C语言而言目前暂时没有这样的库,大部分都是各大厂家整理的,或者是一些大牛自己开源的等等,这样就难以形成一个比较好的标准,不太便于程序员代码之间的交流和软件的复用。
STL库既然是一个库就跟标准库一样,如果你觉得方便,或者有这块需求,直接白嫖,如果你觉得STL实现得不够好,或者需改良,也可以自己来编写。
**2、STL的组成 **
对于STL主要分为如下6大组件 :
下面小哥简单的介绍每个组件:
**容器 : **是一些用于存储数据的数据结构,比如链表、队列、栈等等,大部分都是类模板。
**算法 : **也就是我们平时提到的各种算法,比如排序,查找等等,大部分都是一些函数模板,
**迭代器 : **名字看起来比较高大上,其实可以认为它就是一个“智能指针”,用于遍历容器,所以每种容器都有自己的迭代器用来遍历。
**分配器 : **主要是用于辅助容器分配和管理空间。
**仿函数 : ** 主要是与算法结合,因函数指针无法满足C++抽象需求,通过重载操作符(),来实现类似函数调用的过程。
**适配器 : **其名称就可以看出,主要是用于接口的相互转换,从而协调多种端口,容器、仿函数、迭代器都可以与适配器结合,类比电源适配器进行电压转换。
那么下面小哥简单的通过一个图来描述这6大组件之间的关联,以便大家更好的理解。
分配器为容器分配数据空间,而迭代器就是为了遍历容器,算法通过迭代器来访问容器,仿函数使得算法更加的灵活,而这些适配器可以为外界提供新的接口。
**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
12
13 cout<<" vr size: "<
15 for(int Index = 0; Index < vr.size(); Index++)
16 {
17 vr[Index] = Index + 1; //直接以数组方式访问即可
18 cout<<" vr["<
20
21 //2、队列容器适配器(FIFO--即先进先出)
22 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语言那样再徒手编写队列了,简直不要再方便了~
当然STL库远比上面复杂得多,后面小哥还会为大家慢慢道来~
这里小哥就介绍了C++中白嫖STL库。本系列文章还会持续更新,以最通俗易懂的方式跟大家谈谈C++,期待您的关注与支持~
全部0条评论
快来发表一下你的评论吧 !