liitdar的博客

逆水行舟,不进则退

STL简介

本文主要介绍STL的相关知识。

1. 概述

STL(Standard Template Library),即标准模板库,惠普实验室开发的一系列软件的统称。从根本上说,STL是一些“容器”的集合,这些“容器”有list、vector、set、map等,同时,STL也是算法和其他一些组件的集合。STL现在是C++的一部分,因此不用安装额外的库文件。

WHY STL:开发STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。

STL是一个标准,只规定了STL的接口,内部实现没有要求。当前STL存在许多实现版本,如PJ STL(被Visual C++采用)、RW STL、SGI STL等。由于SGI STL版本注释丰富,结构清晰,可读性最强,同时它也被GCC采用,所以是现在最流行的STL版本。

2. STL组件

STL包括:容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器/适配器(adapters)、算法(algorithms)、仿函数(functors)六个组件。现分别对这些组件进行介绍。

2.1 容器(containers)

在实际的软件开发过程中,数据结构本身的重要性不逊于(操作于数据结构的)算法的重要性,特别是当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。

虽然经典的数据结构数量有限,但是我们在日常开发中,常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化,而在细节上有所出入,这样就带来了重复开发的问题。

STL容器的出现就是为了解决上面的问题。STL容器允许我们重复利用已有的数据结构,构造自己在特定类型下的数据结构,通过设置一些模板类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。

STL容器作为常用数据结构,大致分为两类:

1)序列容器,即通过序列化访问的容器,如vector,list,deque;
2)关联容器,即通过键值对访问的容器,如set,map。

STL容器在实现上,属于类模板(class template)。

STL容器主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。

2.2 迭代器(iterators)

迭代器在STL中,用来将算法和容器联系起来,几乎STL提供的所有算法都是通过迭代器存取容器中的元素序列进行工作的。

迭代器可以理解为”一套访问容器的接口“,其行为类似于指针,它为不同算法提供的相对统一的对容器中元素的访问方式,使得设计算法时无需过多地关注数据。

每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。

2.3 空间配置器(allocator)

为容器提供空间配置和释放、对象构造和析构的服务。

通常我们可以在代码中用"#include <memory>"来包含它。

STL空间配置器在实现上,属于类模板(class template)。

2.4 配接器(adapters)

配接器(adapter):将一种容器修饰为功能不同的另一种容器,如以容器vector为基础,在其上实现stack,stack的行为也是一种容器,这就是一种配接器。除此之外,还有迭代器配接器和仿函数配接器。

2.5 算法(algorithms)

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

STL提供了大约100个实现算法的模版函数,比如算法“for_each”为指定序列中的每一个元素调用指定的函数;算法“stable_sort”以你所指定的规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的简化,只需要通过调用一两个算法模板,就可以完成所需要的功能,并大大地提升效率。

STL提供一套常用的算法,其中常用到的功能范围涉及到:比较、交换、查找、遍历操作、复制、修改、移除、反转、排序、合并等等。

STL的算法在实现上,可以认为是一种函数模板(function template)。

2.6 仿函数(functors)

STL的仿函数,作为函数使用的对象,用于泛化算法中的操作。
阅读更多
版权声明:本文为博主原创文章,商业转载请联系作者获得授权,非商业转载请注明出处。 https://blog.csdn.net/liitdar/article/details/79974849
文章标签: STL
个人分类: C/C++语言
上一篇Linux操作系统的相关小操作
下一篇STL之map介绍
想对作者说点什么? 我来说一句

STL 简介,标准模板库

2010年09月26日 149KB 下载

STL常用算法简介

2017年11月14日 109KB 下载

stl相关资料 effective stl

2011年05月23日 1.74MB 下载

STL和常用算法简介

2007年07月09日 458KB 下载

C++的STL简介

2014年11月17日 134KB 下载

没有更多推荐了,返回首页

关闭
关闭