二十二. 标准模板库

● STL基本介绍

标准模板库(STL, standard template library): C++提供的大量的函数模板(通用算法)和类模板。

 

※ 为什么我们一般不需要自己写模板?因为STL里已经为我们写好了。我们的任务是:学会使用它们。

 

STL(Standard Template Library),即标准模板库,由惠普实验室(HP Labs)开发, 是一个具有工业强度的、高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。

该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法,为广大C++程序员们提供了一系列具有良好结构的通用C++组件,它们都是可扩展的应用框架,高度体现了软件的可复用性。这种现象有些类似于Microsoft Visual C++中的MFC(Microsoft Foundation Class Library).

STL是最新的C++标准函数库中的一个子集,这个庞大的子集占据了整个库大约80%的分量。

 

※ 常见的C++组件有4种:类(class)、集合和容器(collection and container)、类库(class library)、应用框架(applicationframework)。

 

虽然STL是一个模板库,但其中也包含了其它一些内容。

一般来说,STL由如下的六大部分组成:容器(Containers)、算法(Algorithms) 、迭代器(Iterators) 、仿函数(Functors) 、配接器(Adapters) 、配置器(Allocators)。

核心是容器(数据结构), 算法, 迭代器(指向容器元素的指针).

 

STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器)。几乎所有的代码都采用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。

 

在C++标准中,STL被组织为13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。

 

● 容器

容器: STL容器是一种class template, 用于管理数据的集合, 包括各种数据结构

包含在头文件<vector>, <list>, <deque>, <map>,<set>中

容器分为序列式容器(sequential container)和关联式容器(associative container)。

序列式容器主要有:vector, list, deque

关联式容器/结合式容器主要有:map,multimap,set,multiset, hash table

数据结构

描 述

实现头文件

向量(vector)

连续存储的元素`

<vector>

列表(list)

由节点组成的双向链表,每个节点包含着一个元素

<list>

双队列(deque)

连续存储的指向不同元素的指针所组成的数组

<deque>

集合(set)

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

<set>

多重集合(multiset)

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

<set>

栈(stack)

后进先出的值的排列

<stack>

队列(queue)

先进先出的执的排列

<queue>

优先队列

(priority_queue)

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

<queue>

映射(map)

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

<map>

多重映射

(multimap)

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

<map>

 

● 算法

算法: STL算法是function template

STL中的算法部分由头文件<algorithm>、<numeric>和<functional>组成。

STL提供了大约100个实现算法的模板函数,比如sort, search, copy, erase等, 用户可以通过调用一两个算法模板就可以完成所需要的功能.

 

● 迭代器

迭代器: STL迭代器是class template.

在面向对象编程中,一个迭代器是一个对象,更准确地说, 是指向容器元素的指针, 它允许遍历其它对象的元素,通常是容器或列表。

In object-oriented programming, an iterator is an object, or rather, which allows one to sequence through all of the elements contained in some other object, typically a container or list.

 

● C++标准库的成分

C++标准库: 可分为两部分:C++语言本身和C++标准库。

※ C++标准库中存在两套C的函数库, 一套是带有.h扩展名的, 而另一套则没有, 并且它们确实没有太大的不同.

 

 posted on 2018-01-29 16:47  Arroz  阅读(603)  评论(0编辑  收藏  举报