STL源码学习系列一: 理论基础(Theory)

理论基础(Theory)


STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间
六大组件交互关系


STL的从广义上讲分为三类:

  algorithm(算法)
  container(容器)
  iterator(迭代器)

容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会
C++标准中,STL被组织为下面的13个头文件:algorithm、deque、functional、iterator、vector、list、map、memory、numeric、queue、set、stack 和utility

使用STL的好处

1.STL是C++的一部分,因此你不用额外安装什么,它被内建在你的编译器之内。
2.STL的一个重要特点是数据结构和算法的分离,使得STL变得非常通用。
3.程序员可以不用思考STL具体的实现过程,只要能够熟练使用STL就OK了,我们可以把精力放在程序开发的别的方面。
4.STL具有高可重用性,高性能,高移植性,跨平台的优点。

STL详细的说六大组件

–   容器(Container)
–   算法(Algorithm)
–   迭代器(Iterator)
–   仿函数(Function object)
–   适配器(Adaptor)

我们知道,stl有容器,空间配置器,适配器,迭代器,仿函数以及算法这6个组件,它们六者关系大概如下:
容器通过配置器取得数据存储空间,算法通过迭代器获取容器内容,仿函数可以协助算法完成不同的策略变化,
配接器可以修饰或套界仿函数。

容器

  容器的概念:是数据结构的实现,用来管理一组元素 。

  容器的分类:

    序列式容器(Sequence containers) 每个元素都有固定位置--取决于插入时机和地点,和元素值无关。vector、deque、list 
    关联式容器(Associated containers)元素位置取决于特定的排序准则,和插入顺序无关 set、multiset、map、multimap

这里写图片描述


迭代器

 软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化, 这种简化在STL中就是用迭代器来完成的。
 概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭
 代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。迭代器部分主要
 由头文件<utility>,<iterator>和<memory>组成。

算法

C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者
说对模板进行特化的时候,STL就利用了这一点提供了相当多的有用算法

算法部分主要由头文件<algorithm>,<numeric>和<functional>组成。
<algorithm>是所有STL头文件中最大的一个(尽管它很好理解),它是
由一大堆模版函数组成的,可以认为每个函数在很大程度上 都是独立的,
其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、
移除、反转、排序、合并等等。<numeric>体积很小,只包括几个在序列
上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
<functional>中则定义了一些模板类,用以声明函数对象。

仿函数

*重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。
*一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类对象,如果没有上下文,完全可以把
它看作一个函数对待

函数适配器

用于特化和扩展一元和二元函数对象。
函数适配器可以分为以下四类:

绑定适配器
组合适配器
指针函数适配器
成员函数适配器

空间适配器

其中主要工作包括两部分:

对象的创建与销毁   
内存的获取与释放

End

猜你喜欢

转载自blog.csdn.net/qq_34777600/article/details/80399432