正文

什么是STL2010-11-03 15:40:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/edwardguo/51970.html

分享到:

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

  一、STL简介

  STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。

  STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。以下笔者就简单介绍一下STL各个部分的主要特点。

  二、算法

  大家都能取得的一个共识是函数库对数据类型的选择对其可重用性起着至关重要的作用。举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯定比使用整型作为它的参数类性要高。而C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说对模板进行特化的时候,STL就利用了这一点提供了相当多的有用算法。它是在一个有效的框架中完成这些算法的——你可以将所有的类型划分为少数的几类,然后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型。

  STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并大大地提升效率。

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

  三、容器

  在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。

  经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。

  容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下表总结一下它们和相应头文件的对应关系。

  数据结构 描述 实现头文件 

  向量(vector) 连续存储的元素 <vector> 

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

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

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

  多重集合(multiset) 允许存在两个次序相等的元素的集合 <set> 

  栈(stack) 后进先出的值的排列 <stack> 

  队列(queue) 先进先出的执的排列 <queue> 

  优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列 <queue> 

  映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 <map> 

  多重映射(multimap) 允许键对有相等的次序的映射 <map> 

  四、迭代器

  下面要说的迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些(至少笔者是这样)。软件设计有一个基本原则,所有的问题都可以通过引进一个间接层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。

  迭代器部分主要由头文件<utility>,<iterator>和<memory>组成。<utility>是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,<iterator>中提供了迭代器使用的许多方法,而对于<memory>的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,<memory>中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

http://hi.baidu.com/135006819/blog/item/50a5e1cfbee48c1c01e928a1.html

http://www.kuqin.com/baike/20081006/21113.html

http://net.pku.edu.cn/~yhf/UsingSTL.htm

Boost 库 学习指南

Boost 中文站

Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。本站主要介绍Boost相关的中文技术文档。 
Boost 入门

C++ Boost 学习资源列表 
boost库简介 
Windows和Solaris上Boost安装和编译 
走进Boost(Boost使用入门)

Boost 编程技术

Boost中的智能指针 
C++ Boost Thread线程编程指南
Boost 中文文档

C++ Boost库文档索引文档 
C++ Boost Assign 文档 
C++ Boost Regex 文档 
C++ Boost Array 文档

Boost 源码剖析

Boost源码剖析之:容器赋值—assign 
Boost源码剖析之:型别分类器—type_traits 
Boost源码剖析之:泛型指针类any之海纳百川 
Boost源码剖析之:增强的std::pair——Tuple Types

Boost 论坛

C++ STL(标准模板库) 学习资源列表

C++ STL(标准模板库) 学习资源列表

作者:Winter

来源: 最优秀的STL学习网站

C++ STL(标准模板库) 学习资源列表 
1 STL网站类 
2 STL书籍类 
3 STL 技术文章类 
STL以其独特的魅力得到越来越多的程序员钟爱,STL彻底封装复杂的数据结构,提供丰富灵活的程序接口,同时还能保证程序的运行效率。上次整理的STL技术文章列表得到许多朋友的捧场,这里整理更全面的STL学习资源列表,希望对朋友们有所帮助。

1 STL网站类

SGI STL ★★★★★

SGI STL是目前应用最为广泛的STL版本了。此网站提供SGI STL源码下载,还提供相应的STL编程帮助文档,以及部分设计文档。不过对于STL刚开始学习的朋友来说,可以放在第二步学习。

STLport ★★★★★

STLport STL完全可以与SGI STL媲美。此网站提供STLport STL源码下载,在线帮助,同时也提供一些STL资源列表,都是英文的,不过看看无妨。在C++ Builder中使用的就是STLport

Center of STL Study(最优秀的STL学习网站)★★★★★

以Blog的形式,提供STL学习资料,收集了大量的STL电子书,技术论文,应用实例等,而且在不断更新。对于初学者和深入研究STL的朋友,都是一个很不错的网站。

STL 中文站 ★★★★★

STL 中文站是目前最专业介绍STL的中文网站,网站收集了STL技术文章,提供STL电子书下载。并且有大量的原创文章,值得收藏。

Dinkumware (VC/VC.net STL.net)官方网站★★★

也是常说的P.J. STL官方网站。如果使用MS的C++开发工具,这个网站是不能少的,从VC6到VC7,STL方面已经得到了质的飞跃,在随后的5年之内,MS都会使用Dinkumware 的STL版本。

Rouge Wave STL★★★

Windows平台下的C++ Builder STL以前的版本,具有一定的声誉,但相比前几个版本来说,略落后一些,主要是在性能方面。目前在其首页已经找不到STL的资料了,只能从支持文档中得到部分资料。

2 STL书籍类

(此处所列的STL书籍,均提供电子版下载):

The C++ Standard Library : A Tutorial and Reference★★★★★

这本是最为经典的一本STL教材,可以作为自学教程,也可作为参考手册。目前已经有中文版,书名为《C++ 标准程序库》候捷和孟岩翻译,华中科技大学出版社。翻译得很不错,只是价格偏高,一百多,如果英文不错还是看英文版吧:)。

Effective STL(英文版)★★★★★

Effective STL是一本非常好的书,帮助你更好的理解STL,其作者就是《Effective C++》一书的作者。如果你已经初步了解了STL的容器、迭代器、算法和函数,而又想更好的了解STL,那么《Effective STL》是你的最佳选择。

Effective STL(中文版)★★★★★

Effective STL中文版是由龚敏敏翻译,很不错,强烈推荐。你也可以看看在线看电子版Effective STL在线电子版。如果你想看看其他人翻译得,也可以查看Effective STL 中文版(大全)。各有特色。

STL编程指南(Programmer's Guide)★★★★★

《STL编程指南》本电子书把SGI STL的相关帮助文档集合在一起,形成chm格式文档,查阅起来非常方便。使用STL编程的必备手册,比拟于VC的MSDN,Linux/Unix平台下的man命令。 在这里可以看见在线电子版STL编程指南

STL源码剖析(候捷) ★★★★

如果希望全面理解STL内部机制,如果希望真正精通掌握STL,如果希望从STL中学习更多的编程技巧,那么你一定要看这本书。可惜的这里只有上册电子版下载,找不到下册。

其它 C++ STL电子书下载★★★★

那里还包括各种版本的STL电子书下载,而且还在陆续更新,值得推荐。

3 STL 技术文章类

STL技术文章不完全列表(STL学习使用指南) ★★★★★

为Winter所作的,按不同类别进行整理,而且在更新中。

Codeguru上的STL技术文章★★★★

Codeguru就不用介绍了吧,其收录的文章也不错。都是英文。

CodePreject网站上的STL文章★★★

阅读(3815) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册