STL 容器,算法,迭代器 总结

转载 2012年03月31日 09:41:44
一、容器 
作为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的一个难点,但这也是关键。

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

STL的算法也是非常优秀的,它们大部分都是类属的,基本上都用到了C++的模板来实现,这样,很多相似的函数就不用自己写了,只要用函数模板就OK了。

我们使用算法的时候,要针对不同的容器,比如:对集合的查找,最好不要用通用函数find(),它对集合使用的时候,性能非常的差,最好用集合自带的find()函数,它针对了集合进行了优化,性能非常的高。

三、迭代器
它的具体实现在<itertator> 中,我们完全可以不管迭代器类是怎么实现的,大多数的时候,把它理解为指针是没有问题的(指针是迭代器的一个特例,它也属于迭代器),但是,决不能完全这么做。

迭代器功能(Abilities Of Iterator Gategories)

输入迭代器

Input iterator
向前读

Reads forward
istream

输出迭代器

Output iterator
向前写

Writes forward
ostream,inserter

前向迭代器

Forward iterator
向前读写

Read and Writes forward

双向迭代器

Bidirectional iterator
向前向后读写

Read and Writes forward and

backward
list,set,multiset,map,mul

timap

随机迭代器

Random access iterator
随机读写

Read and Write with random

access

vector,deque,array,string


From:http://www.game798.com/html/2007-04/3343.htm

STL(标准模板库)理论基础,容器,迭代器,算法

基本概念         STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很...
  • zyq522376829
  • zyq522376829
  • 2015年07月07日 15:21
  • 1015

C++ STL 容器 迭代器 算法 [大三四八九月实习]

0 关于计算机语言中的命名 在计算机语言中,一个对象不管它被取为什么名字,只要知道它是用来干什么的即可。不必太纠结于它的名字,它没有行不改名坐不改姓的江湖气息,自己如果觉得有一个更适合的名字可以在自己...
  • misskissC
  • misskissC
  • 2013年08月19日 10:54
  • 3182

STL中 容器 算法 迭代器 之间的关系

最近一直在看侯捷写的《STL源码剖析》小有想法。故此一记 1,三者之间联系:          每个容器都有专属的迭代器,而算法通过迭代器对容器中的元素进行操作。 2,容器      ...
  • wonderful_ha
  • wonderful_ha
  • 2011年09月06日 11:16
  • 1978

STL的6大组件:容器、类属算法、迭代器、函数对象、适配器、分配器。

STL知识点。梗概。 ...
  • chenhu_doc
  • chenhu_doc
  • 2006年07月29日 22:19
  • 3051

【C++】STL常用容器总结之一:容器与迭代器

声明: 1、本博文主要整理自《C++ Primer》和《STL源码剖析》这两本经典书籍。同时,也参考了网络中不少优秀博客,对这些博客的作者表示感谢。 2、由于博主能力有限,对于一些容器的用法可能尚...
  • hero_myself
  • hero_myself
  • 2016年08月24日 22:46
  • 2976

STL的容器算法迭代器的设计理念

1) STL的容器通过类模板技术,实现数据类型和容器模型的分离。 2) STL的迭代器技术实现了遍历容器的统一方法;也为STL的算法提供了统一性。 3) STL的函数对象实现了自定义数据类型的算法...
  • zyq522376829
  • zyq522376829
  • 2015年07月09日 22:15
  • 945

c++ STL常见算法和迭代器

STL标准化了容器的使用方法,所以可以使用通用的算法和迭代器来操作容器,这里总结下常用的容器算法和迭代器用法。...
  • wenzhou1219
  • wenzhou1219
  • 2016年05月29日 20:21
  • 1010

C++ STL 容器、迭代器、适配器

1、容器vector,list,deuqe是C++STL中三种基本容器实现,它们不可能互为实现同时又不损失效率 2、stack和queue则都可以在这三种基本容器序列基础上实现,所以没有定义为独立...
  • richrdbird
  • richrdbird
  • 2016年03月31日 15:36
  • 1844

STL学习—STL六大组件

STL六大组件 STL主要提供6大组件: 1、容器(container):各种数据结构,如map、vector、list、deque、set等,用来存放数据; 2、算法(algorithm):各...
  • u010275850
  • u010275850
  • 2016年07月18日 00:03
  • 242

面试总结3--STL问题

1、 为何map和set的插入删除效率比用其他序列容器高?  因为对于关联容器来说,不需要做内存拷贝和内存移动。说对了,确实如此。map和set容器内所有元素都是以节点的方式来存储,其节点结构和链表...
  • u012286517
  • u012286517
  • 2015年11月02日 14:58
  • 772
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:STL 容器,算法,迭代器 总结
举报原因:
原因补充:

(最多只允许输入30个字)