知白守黑

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

STL(Standard Template Libery)不是C++标准库的全部,但是却是最重要的一部分。STL所提供的是一些模版的集合,提供了一种开发框架,使得编程者再不必要的时候不必苦恼于常常引起麻烦的动态数组、链表和排序算法等。

 STL的三个要素是容器(container)、迭代器(iterator)和算法(algorithm)。迭代器有些类似指针,可以用"*"得到它的值,用"++"得到下一个迭代器。

STL的概念是基于数据和操作分离的。容器处理数据,算法属于操作,而迭代器将他们结合起来。STL的概念看起来和面向对象思想背道而驰,然而所有的类型都带有一样的操作时,将其分开效果似乎更好。

STL容器分为两类:序列式容器(Sequence Containers)和关联容器(Associative Containers)。序列式容器包含向量、队列和链表,关联容器包括set、multiset、map和multimap。关联容器的每一个元素再插入的时候就会被自动排序,从而把查找时的时间复杂度降低为lgn,而序列式容器中元素的位置是按照插入的先后排列的。

通常来讲,STL只提供那些时间复杂度比较好(n或者logn)的操作以防用户误用。下面简要的按照书中的顺序简单地介绍一下各种容器。

Vectors:

在需要使用动态数组的时候,可以考虑使用Vectors。

头文件是<vector>,添加元素的操作push_back(),访问元素的操作[]。vector A的元素是从0开始的,到A.size()-1。

Deques:

    Deque是"double-ended queue"的缩写,从头和尾插入元素都是很快的。

    头文件是<deque>,从头添加元素的操作push_front(),从尾添加的元素push_back()。

Lists:

    是由双向链表实现的。没有实现随机访问(random access),从中间某处删除节点很容易。

    头文件是<list>,判定链表为空empty();得到第一个元素front();删除第一个元素pop_front(),pop_front()并不返回元素。

普通的c/c++数组可以调用算法。

posted on 2009-05-31 09:08  知白守黑  阅读(559)  评论(0编辑  收藏  举报