STL学习小结(原创:桑英硕 )[1]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 wxaxiao 的 blog

提供了类型安全、高效而易用特性的stl无疑是最值得c++程序员骄傲的部分。每一个c++程序员都应该好好学习stl:).   

stl(standard template library 标准模板库)是c++标准库的一个重要组成部分,它由stepanov and lee等人最先开发,它是与c++几乎同时开始开发的;一开始stl选择了ada作为实现语言,但ada有点不争气,最后他们选择了c++,一个原因了,c++中已经有了模板。在后来,stl又被添加进了c++库。1996年,惠普公司又免费公开了stl,为stl的推广做了很大的贡献。

stl大体上包括container(容器)、algorithm(算法)和iterator(迭代器),容器和算法通过迭代器可以进行无缝连接。  

stl体现了型编程的思想,它具有高度的可重用性,高性能,高移植性。程序员不用思考具体实现过程,只要能够熟练的应用就ok了。(有兴趣研究具体实现的,可以看侯捷老师编著的《stl源码剖析》)这样他们就可以把精力放在程序开发的别的方面。

我非常佩服创造stl的那些计算机和数学精英。因为他们做了一件非常辛苦的事情╠╠╠抽象概念。而stl就是通过把容器抽象为统一的接口,算法利用这个接口,通过迭代器来操纵容器。因为接口不变,实现的容器可以随意更改。这样,就为编程、调试和扩展提供了便利。也许有一天,我们生产软件的时候也可以想diy一台pc一样简单,只要拿来相应的实现模块,通过简单的拼装和调试就可以创造一个软件。这是多么令人兴奋的一件事^_^.不过,到时候,可能会有很多程序员失业了。呵呵,毕竟编写类库不需要很多的人员。

虽然stl不是面向对象的,但,我想,每个人都会为它的创造力和高性能而感到兴奋和折服。

一、容器 
作为stl的最主要组成部分--容器,分为向量(vector),双端队列(deque),表(list),队列(queue),堆栈(stack),集合(set),多重集合(multiset),映射(map),多重映射(multimap)。

容器    

特性

所在头文件

向量vector

可以用常数时间访问和修改任意元素,在序列尾部进行插入和删除时,具有常数时间复杂度,对任意项的插入和删除就有的时间复杂度与到末尾的距离成正比,尤其对向量头的添加和删除的代价是惊人的高的

<vector>

双端队列deque

基本上与向量相同,唯一的不同是,其在序列头部插入和删除操作也具有常量时间复杂度

<deque>

list

对任意元素的访问与对两端的距离成正比,但对某个位置上插入和删除一个项的花费为常数时间。

<list>

队列queue

插入只可以在尾部进行,删除、检索和修改只允许从头部进行。按照先进先出的原则。

<queue>

堆栈stack

堆栈是项的有限序列,并满足序列中被删除、检索和修改的项只能是最近插入序列的项。即按照后进先出的原则

<stack>

集合set

由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序,具有快速查找的功能。但是它是以牺牲插入车删除操作的效率为代价的

<set>

多重集合multiset

和集合基本相同,但可以支持重复元素具有快速查找能力

<set>

映射map

由{键,值}对组成的集合,以某种作用于键对上的谓词排列。具有快速查找能力

<map>

多重集合multimap

比起映射,一个键可以对应多了值。具有快速查找能力

<map>

本文关键:STL学习小结(原创:桑英硕 )
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top