C++ STL 入门
STL简介
STL(Standard Template Library,标准模板库)是 C++语言标准中的重要组成部分。 STL 以模板类和模板函数的形式为程序员提供了各种数据结构和算法的精巧实现,程序员如果能够充分地利用 STL,可以在代码空间、执行时间和编码效率上获得极大的好处。
STL 大致可以分为三大类:算法(algorithm)、容器(container)、迭代器(iterator)。
STL 容器是一些模板类, 提供了多种组织数据的常用方法, 例如 vector
(向量,类似于数组)、 list
(列表,类似于链表)、deque
(双向队列)、 set
(集合)、map
(映象)、 stack
(栈)、 queue
(队列)、 priority_queue
(优先队列)等,通过模板的参数我们可以指定容器中的元素类型。
STL 算法是一些模板函数,提供了相当多的有用算法和操作,从简单如for_each
(遍历)到复杂如 stable_sort
(稳定排序)。
STL 迭代器是对 C 中的指针的一般化,用来将算法和容器联系起来。几乎所有的 STL 算法都是通过迭代器来存取元素序列进行工作的,而 STL 中的每一个容器也都定义了其本身所专有的迭代器,用以存取容器中的元素。有趣的是,普通的指针也可以像迭代器一样工作。
熟悉了 STL 后,你会发现,很多功能只需要用短短的几行就可以实现了。通过STL,我们可以构造出优雅而且高效的代码,甚至比你自己手工实现的代码效果还要好。STL 的另外一个特点是,它是以源码方式免费提供的,程序员不仅可以自由地使用这些代码,也可以学习其源码,甚至按照自己的需要去修改它。
使用STL
在 C++标准中, STL 被组织为以下的一组头文件(注意,是没有.h 后缀的!):algorithm
/deque
/ functional
/ iterator
/list
/ map
memory
/ numeric
/ queue
/ set
/ stack
/ utility
/ vector
当我们需要使用 STL 的某个功能时,需要嵌入相应的头文件。但要注意的是,在 C++标准中, STL 是被定义在 std 命名空间中的。如下例所示:
#include <stack>
using namespace std;
int main(){
stack<int> s;
s.push(0);
...
return 0;
}
STL 是 C++语言机制运用的一个典范,通过学习 STL 可以更深刻地理解 C++语言的思想和方法。在本系列的文章中不打算对 STL 做深入的剖析,而只是想介绍一些 STL 的基本应用。有兴趣的同学,建议可以在有了一些 STL 的使用经验后,认真阅读一下《 C++STL》这本书(电力出版社有该书的中文版)。