STL就是所谓的标准模板库.它主要提供了六大组件.

1.容器(container)   2.算法(algorithm)    3.迭代器(iterator)

4.仿函数(functor)    5.适配器(adapter)  6.配置器(allocator)

 

我们知道信息社会里最重要的东东就是信息,而信息在计算机中就是以数据的形式表示.对用户来说很重要的数据一般放数据库里去保存和处理.

那我们写代码中用到的对我们开发人员来说非常重要的数据自然也应该很好的处理下.实际上我们就可以把STL简单的理解在管理我们代码中用到的数据.

程序中处理的数据都需要放到内存中去,所以得给数据分配内存,这主要由配置器(allocator)来管理.

然后嘛很多数据组织到一起时会有不同的结构,你根据不同的需求选择不同的数据结构.这就靠容器(container)了啊,每种容器对应一种数据结构.我们常把数据结构和算法放一起说,

不同的数据结构适合用不同的算法去处理它.STL中就有专门的一个组件算法(algorithm).不过它是跟数据结构分开的,

为了使两者结合起来有用到迭代器(iterator).可以简单的把迭代器理解成一个泛型指针,也就是说它能够指向容器中的任意一个元素.这样就能通过迭代器去读取修改容器中的元素.实际上普通的指针就可以看成一个特殊的迭代器.

由于实际应用需求千奇百怪,你提供的固定的算法不一定适合,于是出现了仿函数(functor),就是可以在算法的参数中传函数进去,在算法的实现中会调用到你提供的函数.不过仿函数不是个函数,而是封装了函数的类.反正就功能上而言把它跟函数差不多.

我们用电源插头的时候会发现有些插头只能插进对应的插座.把一些常用的容器,算法或仿函数当成一些固定的插座.那适配器(adapter)相当于把插座包装下,再提供不同的插座接口.而新的接口是基于原来的功能的.实际上我们可以把这理解成一种代码重用.面向对象中如果类之前有继承关系,那子类继承父类达到了重用的目的.而没有继承关系的可以通过把另外的类作为一个成员(has-a关系),通过组合的手段达到代码重用.

 

1.容器种类

容器都是用类模板(class template)实现的

容器主要分为序列容器和关联容器

序列容器: vector , list, deque

关联容器: set, map, multiset, multimap, hash_set, hash_map, hash_multiset, hash_multimap

容器适配器: stack , queue, priority_queue

其中适配器容器就是基于序列容器的功能而实现的.

 

2.算法

算法都是用函数模板(function template)实现的.

比如有sort, search,copy,erase等常用算法

 

3.迭代器种类

迭代器是用类模板(class template)实现的.重载了* -> ++ -- 等运算符.

迭代器分5种:

输入迭代器, 输出迭代器, 前面迭代器,双向迭代器, 随机访问迭代器.

 

4.仿函数

仿函数是用类模板(class template)实现的.重载了operator().实际上一般的函数指针可以看作一个特殊仿函数

 

5.适配器

一种用来修饰容器、仿函数、迭代器接口的东西

 

6.配置器

配置器主要负责内存的分配,管理,释放.

STL中默认的配置器是类allocator

 

 

六大组件关系是:

Container 通过Allocator获得数据存储空间,Algorithm 通过Iterator存取Container中的内容,

Functor可以协助Algoritm完成不同策略,Adapter可以修饰Container,Algorithm,Iterator.

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐