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

[STL基础]STL概述

 
阅读更多

什么是STL

STL就是StandardTemplateLibrary,标准模板库。STL是泛型编程的实例,用到的技术就是类模板和函数模板。STL的一个重要特点是数据结构和算法的分离。

模板:所谓模板是一种使用无类型参数来产生一系列函数或类的机制。通过模板可以产生类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个独立的类或函数。

STL简介

STL的代码从广义上讲分为3类:algorithm(算法)、container(容器)和iterator(迭代器)。几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用几乎。在C++标准中,STL由13个头文件组成,如<list>

STL的代码从广义上讲分为三类(共13个头文件)

算法(algorithm)3个头文件

algorithm,numeric,functional

容器(container)7个头文件

vector,list,deque,stack,set(set,multiset),map(map,multimap),queue(queue,priority_queue)10个数据结构

迭代器(iterator)3个头文件

iterator,memory,utility

算法

算法是用来操作容器中的数据的模版函数。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。函数本身与他们操作的数据的结构和类型无关,因此他们可以从简单的数组到高度复杂容器的任何数据结构上使用。

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

容器

容器是一种数据结构,如list,vector和deques,以模板类的方法提供。为了访问容器中的数据,可以使用容器类输出的迭代器。

数据结构 描述 头文件
vector向量 连续存储元素 <vector>
list列表 由节点组成的双向链表,每个节点包含一个元素 <list>
deque双列表 连续存储的指向不同元素的指针所组成数组 <deque>
set集合

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

<set>
multiset多重集合

允许存在两个次序相等的元素的集合

<set>
stack栈

后进先出的值的排列

<stack>
queue队列

先进先出的执的排列

<queue>
priority_queue优先队列

元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列

<queue>
map映射

{键,值}对组成的集合,以某种作用于键对上的谓词排列

<map>
multimap多重映射

允许键对有相等的次序的映射

<map>

对应的数据结构:vector线性表,list双向链表,stack栈,queue队列,deque可以理解为vector和list的结合体,set红黑树,map平衡二叉树

容器分为三大类
顺序容器

vector:后部插入/删除,直接访问

deque:前/后部插入/删除,直接访问

list:双向链表,任意位置插入/删除

关联容器

set:快速查找,无重复元素

multiset:快速查找,可有重复元素

map:一对一映射,无重复元素,基于关键字查找

multimap:一对一映射,可有重复元素,基于关键之查找

容器适配器

stack:LIFO

queue:FIFO

priority_queue:优先级高的元素先出

迭代器

迭代器提供了访问容器中对象的方法。例如,可以使用一对迭代器指定list或vector中的一定范围的对象。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器也可以是那些定义了operator*()以及其他类似于指针的操作符地方法的类对象。

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

迭代器部分主要由头文件<utility>,<iterator><memory>组成。

<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,

<iterator>中提供了迭代器使用的许多方法,

而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

分享到:
评论

相关推荐

    STL关联容器概述1

    STL关联容器概述1

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

    第4章 C++STL泛型库概述 第5章 C++STL泛化技术分析 第三篇 C++STL容器技术 第7章 deque双端队列容器 第8章 list双向链表容器 第9章 slist单向链表容器 第10章 bit_vector位向量容器 第11章 set集合容器 第12章 ...

    STL的容器deque的使用

    STL的容器deque的详细使用方法和文档 6.0代码

    C++ STL开发技术导引(第5章)

    第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...

    STL源码剖析.pdg

    sgi stl 内部文件(sgi stl真正实现于此) 018 1.8.3 sgi stl 的组态设定(configuration) 019 1.9可能令你困惑的c++ 语法 026 1.9.1 stl_config.h 中的各种组态 027 组态3:static template member 027 组态5...

    C++模板与STL.pptx

    模板 函数模板 类模板 断言 STL概述 STL容器 STL 迭代器 STL 算法 STL其他构件

    C++ STL 开发技术导引(第6章)

    第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...

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

    本书前言清楚说明了书籍的定位和合适的读者,以及各类基础读物。如果你的Generic Programming/STL实力足以阅读本书所呈现的源码,那么,恭喜,你踏上了基度山岛,这儿有一座大宝库等着你。源码之前了无秘密,你将...

    三十分钟掌握STL doc文档

    STL概述 STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组...

    STL排序概述

    大致介绍了直接使用排序,与自己重新定义STL排序函数的方法。

    CPP-17-STL-cookbook:作为对《C++17 STL cookbook》英文版的中文翻译

    本书概述 作为对《C++17 STL Cook book》的中文翻译。 C++因其快捷、高效和灵活的特点,帮助人们解决了很多问题,在很多领域种都有所使用。其将要到来的新版本,将会改变人们的编程习惯。如果想要掌握更加高明的编程...

    stl map 概述

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程...

    C++ STL开发技术导引(第3章)

    第4章 C++ STL泛型库概述 48 4.1 C++ STL的发展历程 48 4.2 C++ STL的各种实现版本 49 4.2.1 HP STL 49 4.2.2 SGI STL 50 4.2.3 STLport 50 4.2.4 P.J.Plauger STL 50 4.2.5 Rouge Wave STL 50 4.3...

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

    3-1 模板概述· · · · · · • · · · · · · · · · · · · ·...................................... 104 3-1-1 Smalltalk 方法,· · · · · · · ·-· · · · · · · · · · ·., ........

    C++模板与STL库介绍

    ,C++模板与STL库介绍,1. 概论 2. 模板机制的介绍 3. STL中的基本概念 4. 容器概述 5. 迭代器 6. 算法简介

    电气控制与PLC应用技术(第2版) 第5章 顺序功能图(SFC)及步进梯形图(STL)

    5.1.1 SFC概述 5.1.2 SFC程序的创建步骤及方法 5.2 步进梯形图(STL) 5.3 SFC及STL的编程规则 5.4 多流程顺序控制 5.4.1 选择分支与汇合 5.4.2 并行分支与汇合 5.4.3 跳步与循环 5.5 SFC及STL的应用...

    通信与网络中的采用STLC1502的小型VoIP用户网关设计

     概述  随着2000年互联网泡沫的破灭,IT近几年徘徊在低谷,复苏艰难。然而VoIP(voice over internet protocol)技术带来的冲击波却在不断增强。VoIP又叫IP电话,泛指在以IP为网络层协议的计算机网络中进行话音通信...

    标准库概述

    标准库概述 标准库概述 标准库概述 标准库概述 标准库概述

    21.STL_list类.wmv(目前数据结构最好的视频,共42集,需要哪一集的知识自己下,一集3积分)

    17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...

    西门子S7-300/400 PLC编程:梯形图和功能块图描述(第3版)

    本书从S7—300/400的介绍、基本功能、数字功能、程序流控制以及程序处理等几个方面详细阐述了S7—300/400的STL和SCL编程语言及其使用方法,主要内容包括系统概述(SIMATIC S7和CTEP 7)、编程语言STL和SCL、数据...

Global site tag (gtag.js) - Google Analytics