STL简介

原创 2018年04月17日 15:38:30

本文主要介绍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 简介,标准模板库

  • 2010年09月26日 03:06
  • 149KB
  • 下载

STL常用算法简介

  • 2017年11月14日 14:13
  • 109KB
  • 下载

STL格式简介

STL只能用来表示封闭的面或者体,stl文件有两种:一种是ASCII明码格式,另一种是二进制格式。 ASCII格式 ASCII码格式的STL文件逐行给出三角面片的几何信息,每一行以1个或2个关键字...
  • aiwen521125
  • aiwen521125
  • 2014-07-10 20:59:12
  • 485

stl内存管理

stl内存管理
  • sjc960115
  • sjc960115
  • 2016-12-01 16:24:34
  • 174

TinySTL设计与实现

最近个人博客(huqijun.org) 改版,  一些非创造性的文章迁移到CSDN 概述 学习和理解template 和STL 的最好方式就是自己用template 造一个STL(俗称造轮...
  • xiaoyaohuqijun
  • xiaoyaohuqijun
  • 2017-11-23 18:11:34
  • 198

STL源码分析--第二级空间配置器

本文讲解SGI STL空间配置器的第二级配置器。 相比第一级配置器,第二级配置器多了一些机制,避免小额区块造成内存的碎片。不仅仅是碎片的问题,配置时的额外负担也是一个大问题。因为区块越小,额外负担所占...
  • yusiguyuan
  • yusiguyuan
  • 2014-08-26 09:54:52
  • 1323

C++的STL介绍

常见的STL容器介绍 1、vector 1)顺序赋值: 使用v.push_back(value),也可以使用v[i]=value赋值,但要注意数据越界问题; 2)删除(注意:删除后依然保持顺序连通...
  • Xiongchao99
  • Xiongchao99
  • 2017-06-24 19:43:30
  • 306

STL的二级空间配置器和malloc

前言最近,有同学接到了阿里的内推电面,而我的简历还躺在简历池里没有人看到,痛定思痛,我不在相信自己的记忆力了,虽然面临秋招,我还是打算把我遇到的重要的问题记下来吧问题这个问题就来自于那个同学的面试—-...
  • LXGVENICE
  • LXGVENICE
  • 2017-07-29 11:30:59
  • 138

stl相关资料 effective stl

  • 2011年05月23日 21:31
  • 1.74MB
  • 下载

C++ STL简单介绍

STL(Standard Template Library,标准模板库)是C++对泛型编程思想的实现,最早是惠普实验室开发的。 在被引入C++之前该技术就已经存在了非常长的一段时间。后来STL成为A...
  • w_16822
  • w_16822
  • 2016-10-14 10:53:47
  • 319
收藏助手
不良信息举报
您举报文章:STL简介
举报原因:
原因补充:

(最多只允许输入30个字)