`
blogfeifei
  • 浏览: 1196367 次
文章分类
社区版块
存档分类
最新评论

一、STL简介

 
阅读更多

一、STL简介

  STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。

  STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。以下笔者就简单介绍一下STL各个部分的主要特点。

  二、算法

  大家都能取得的一个共识是函数库对数据类型的选择对其可重用性起着至关重要的作用。举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯定比使用整型作为它的参数类性要高。而C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说对模板进行特化的时候,STL就利用了这一点提供了相当多的有用算法。它是在一个有效的框架中完成这些算法的——你可以将所有的类型划分为少数的几类,然后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型。

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

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

  三、容器

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

  经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。

  容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关系。

  数据结构 描述 实现头文件

  向量(vector) 连续存储的元素 <vector>

  列表(list) 由节点组成的双向链表,每个结点包含着一个元素 <list>

  双队列(deque) 连续存储的指向不同元素的指针所组成的数组 <deque>

  集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 <set>

  多重集合(multiset) 允许存在两个次序相等的元素的集合 <set>

  栈(stack) 后进先出的值的排列 <stack>

  队列(queue) 先进先出的执的排列 <queue>

  优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue>

  映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map>

  多重映射(multimap) 允许键对有相等的次序的映射 <map>

  四、迭代器

  下面要说的迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些(至少笔者是这样)。软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。

  迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

分享到:
评论

相关推荐

    stl简介 (stl入门)

    stl入门相关文档,写的非常好,当然它并不是stl的相关教材,只是适用那些想学stl,但又对stl不甚了解的人,能够让读者对stl有一个大体的认识。

    STL_简介-标准模板库

    STL_简介-标准模板库 STL 简介,标准模板库 作者:Scott Field 这篇文章是关于C++语言的一个新的扩展——标准模板库的(Standard Template Library),也叫STL。 当我第一次打算写一篇关于STL的文章的时候,我...

    STL 简介,标准模板库

    这篇文章是关于C++语言的一个新的扩展——标准模板库的(Standard Template Library),也叫STL。 当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话题的深度和广度。有很多内容要含盖,...

    C++ STL简介

    STL简介,简要介绍了C++语言的一个重要组成部分-标准模板库(STL),对于深入学习C++有启发作用

    STL 标准模板库简介

    一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后他们选择了C++,C++中已经有了模板。STL又被添加进了C++库。1996年,惠普公司又免费公开了STL,为STL的推广做了很大的贡献。STL提供了类型安全、高效而...

    STL简介(入门级)

    这是一个简短的介绍,通过介绍你可以很快的了解Stl,并且可以根据一些例子学习之。

    泛型编程与STL Generic Programming and the STL: Using and Extending the C++ Standard Template Library

    对于泛型组件和可交互作用的组件而言,STL是一个具备扩充能力的框架(framework)、《泛型编程与STL》阐述了泛型编程的中心思想:concepts、modeling、refinement,并为你展示这些思想如何导出STL的基础概念:...

    泛型程序设计与C__STL简介

    泛型程序设计是继面向对象程序设计之后的又一种程序设计方法。 泛型程序设计就是让程序写得通用,能够适用于各种数据类型与数据结构,并且并不损失程序效率。面向对象与泛型程序设计这两种程序设计方法并不矛盾,...

    C++ STL 开发技术导引(随书源码)

    【内容简介】 C++ STL标准模板库在数据结构和算法的实践领域发挥着重要的作用。本书共分5篇26章,以“C++编程技术→C++ STL泛化技术基础→C++ STL容器技术→C++ STL算法技术→C++ STL迭代器技术”为线索具体展开,...

    STL源码剖析.pdg

    第1章 stl 概论与版本简介001 1.1 stl 概论 001 1.1.1 stl的历史 003 1.1.2 stl与c++ 标准程序库 003 . 1.2 stl 六大组件 - 功能与运用 004 1.3 gnu源码开放精神 007 1.4 hp stl实现版本 009 1.5 p.j. ...

    stl详解 包括各种实例代码

    1、STL简介 3 2、算法 3 3、容器 3 4、迭代器 4 5、使用注意 4 一、stack 堆栈 5 成员函数: 5 实例程序: 5 二、queue 队列 6 成员函数: 6 实例程序: 6 三、Priority Queues 优先队列 7 成员函数: 7 实例程序: ...

    STL 源码剖析(侯捷先生译著)

    内容简介回到顶部↑这本书不适合C++ 初学者,不适合 Genericity(泛型技术)初学者,或 STL 初学者。这本书也不适合带领你学习面向对象(Object Oriented)技术 — 是的,STL 与面向对象没有太多关连。本书前言清楚...

    专题讲座之一-C++STL中的几个基本数据结构简介.ppt

    专题讲座之一-C++STL中的几个基本数据结构简介.ppt

    Android代码-安卓设备展示STL 3D模型

    STL格式简介 ASCII格式 ASCII码格式的STL文件逐行给出三角面片的几何信息,每一行以1个或2个关键字开头。 在STL文件中的三角面片的信息单元 facet 是一个带矢量方向的三角面片,STL三维模型就是由一系列这样的三角...

    C++STL程序员开发指南【可搜索+可编辑】

    2-1 C扫标准库简介...................................................... 44 2-1-1 1/0 流技术..................................................... 46 2-1-2 string 类........................................

    C++标准程序库STL的架构

    1.5 STL特点 1 1.6 资源 1 1.7 学习方法 1 2 语言特性 3 2.1 模板 3 2.2 typename 3 2.3 模板类的拷贝构造函数 3 2.4 基本类型数据初始化 3 2.5 异常处理 4 2.6 命名空间 4 2.7 using声明 4 2.8 namespace std 4 2.9...

    Effective STL by Scott.Meyers 中文版 PDF格式 高清文字版 有书签目录 无水印 完整版 C++ STL

    Effective STL by Scott.Meyers 中文版 PDF格式 高清...本书是针对STL的经验总结,书中列出了50个条款,绝大多数条款都解释了在使用STL时应该注意的某一个方面的问题,并且详尽地分析了问题的来源、解决方案的优劣。

    STL源码剖析终稿621

    一.简介11.GNU 源代码开放精神14.STL 六大部件 2二.空间分配器31.空间分配器的标准接口 33.1 对象构造与析构 43.2 内存分配与释放 43

    STL.源码剖析_____________

    如果你的Generic Programming/STL实力足以阅读本书所呈现的源码,那么,恭喜,你踏上了基度山岛,这儿有一座大宝库等着你。源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、RB-tree...

    STL源码剖析简体中文完整版(清晰扫描带目录)修改版

    内容简介 学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。在你仔细推敲之中,迷惑不解之时,...

Global site tag (gtag.js) - Google Analytics