STL简介

来源:互联网 发布:恐怖漫画 软件 编辑:程序博客网 时间:2024/06/06 07:44

STL: standard template library,标准模板库。由容器、迭代器、空间配置器、配接器、算法、仿函数六部分组成。STL并非是面向对象的,为了具有足够通用性,主要依赖于模板而不是OOP三要素(封装、继承以及多态),没有明显的类继承关系。有17个头文件:<algorithm>、<deque>、<functional>、<itreator>、<array>、<vector>、<list>、<forward_list>、<map>、<memory>、<numeric>、<queue>、<unordered_set>、<stack>、<utility>。

一、容器:

一定程度上充当着数据结构的作用,为适应不同数据的变化STL容器提供方便,通过对模板类的设置对常用的数据结构提供支持。其头文件有<vector>、<list>、<duque>、<set>、<map>、<stack><queue>。

序列式容器:向量(vector):连续存储的元素。  

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

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

适配器容器:栈(stack):后进先出的值排列。  

队列(queue):先进先出的值排列。  

优先队列(priority_queue):元素的次序是有作用于所存储的值对上的某种谓词决定的一种队列。关联式容器:集合(set):由节点组成的红黑树,每个节点都包含一个元素,节点间以某种作用于元素对的谓词排列,没有两个不同的元素能拥有相同的次序。  

映射(map):由{键,值}对组成的集合,以某种作用于键对上的谓词排列。多重映射(multimap):运行键对有相当的次序映射。

二、迭代器:

它提供了访问容器中对象的方法并定义了容器中对象的范围,如同一个指针的作用。迭代器由各种不同的传教方法,可以作为一个变量创建,可以为使用一个特定类型的数据而创建,作为指针,能够使用*操作符来获取数据,但STL不保证可以从一个迭代器来抵达另一个迭代器。软件设计的过程中,索引的问题都可以通过引进一个间接层来简化,在 STL中用迭代器来完成。将算法和容器连接为一个整体,几乎STL提供的所有算法均是通过迭代器来存取元素序列的,每个容器都定义了其本身所专有的迭代器。迭代器由头文件<utility><iterator><memory>组成。

<utility>:很小的头文件,包括了在STL中的几个模板的声明。

<iterator>:提供迭代器使用的许多方法。

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

迭代器的类型:Input iterators:提供对数据的只读访问。  

Output iterators:提供对数据的只写访问。

Forward iterators:提供读写操作,并能向前推进迭代器。Bidirectional iterators:提供读写操作,并能向前和向后操作。Random access iterators:提供读写操作,并能在数据中随机移动。

三、算法:

用来操作容器中的数据的模板函数。C++通过模板机制允许推迟对某些类型的选择,直到需要使用模板或者对模板进行转换的时候。STL提供相当多的算法,不依赖于任何特定的数据类型,在一个有效的框架中完成这些算法。由<algorithm><numeric><functional>组成。

<algorithm>:最大的一个头文件,由一大堆模板函数组成,每个函数在很大程度上是独立的,常用的功能有比较、交换、查找、遍历操作、复制、修改、删除、反转、排序、合并等。

<numeric>:包括几个在序列上进行简单数学运算的模板函数,如:加减乘除等。

<functional>定义了一些模板类,用来声明函数对象。


原创粉丝点击