水牛♂ToTo

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
转自:http://blog.chinaunix.net/u/23224/showart.php?id=181144

STL(Standard Template Libarary)主要提供了三类工具:容器container,迭代器iterato,算法
algorithm。
STL提供了两类容器:序列容器——以线性序列方式组织对象;
                关联容器——用关联的键把对象组织在一起。
序列容器:有三种基本类型,分别对应于模版vector<T>,deque<T>和list<T>。他们都存储了一组特定类
型T的对象,这些对象以线性序列方式组织,但每个容器都可以访问以不同方式优化的内容。
vector<T>动态的增加对象的个数,他的大小小于或者等于他的容量。他在尾部删除和添加是最高效的,
相当于简单的数组的组织方式。
deque<T>动态的增加对象的个数,他的大小等于它的容量,他没有capacity()成员函数,他在两端添加和
删除是最高效的。他和vector<T>一样在中间添加和删除,过程比较慢,需要复制已有的元素。由于内部
组织方式不同,deque容器用起来比vector容器略慢。
list<T>的内部组织方式是双向链表,可以在序列的任意位置高效的插入和删除元素。他的主要限制是随
机访问元素比较慢,因为这需要从list的第一个元素或者最后一个元素开始遍历整个list,查找每个元素
所以要根据他们的特点来选择合适的容器。
关联容器:允许使用健存储和提取综合类型的对象。
关联容器有四个基本类型:map<Key,T>,multimap<Key,T>,set<Key>和multiset<Key>。
下略:
STL迭代器,下面迭代器的功能是累加的,输入输出迭代器功能最弱,随机访问迭代器功能最强。
输入输出迭代器:用于读取一些列的对象,且只能使用一次。如需要二次读写序列,就必须创建一个新的
输入输出迭代器。
向前迭代器:合并了输入输出迭代器,可以多次使用。
双向迭代器:与向前迭代器一样,但可以向前向后遍历一系列对象。
随机访问迭代器:提供的功能和双向迭代器相同,还可以随机读写元素。
每种迭代器在运算方面都有限制。
不同的容器支持不同的迭代器。
vector和deque容器支持随机访问迭代器;List,map,multimap,set,multiset容器支持双向迭代器。
STL算法:
STL算法是STL中最大的工具集合。不是所有的算法都和应用程序有关,其中的一些算法还有专门的用途。
算法主要分为三大类:
1:不修改序列的操作:find(),find_end(),find_first(),adjacent_find(),count(),mismatch
(),search(),equal();
2:修改序列的操作:修改序列中的元素。swap(),copy(),transform(),replace(),remove(),reverse
(),rotate(),fill(),radom_shuffle();
3:排序、合并和相关的操作:在一些情况下会改变序列的顺序。sort(),stable_sort(),binary_search
(),merge(),min(),max(),lexicographical_compare().
数值算法:accumulate<>,adjacent_difference<>,inner_product<>,partial_sum<>.
函数对象:重载了函数调用运算符operator()的类对象,专门用于作为参数传送给函数,其效率比使用原
始的函数指针更高。
STL头文件:
<vector>:单端口数组容器
<deque>:双端口数组容器
<list>:双向链表容器
<map>:map和multimap关联数组容器
<set>:set和multiset已排序的设置容器
<bitset>:表示位序列的对象
<queue>:双端口队列(容器适配器)
<stack>:堆栈(容器适配器)
支持迭代器,需要头文件<iterator>,容器头文件中包含迭代器头文件;<map>头文件包含<utility>头文
件,这个头文件中包含定义和管理map和multimap容器所使用的键/值对所需的声明。
算法的声明在头文件<algorithm>中,函数对象的支持由<functional>头文件的声明提供。
数值算法在头文件<numeric>中声明,另外还有<complex>头文件提供复杂数字的支持,<valarray>头文件
提供了数值数组的支持。
另外在流文件集合中还声明了一些迭代器,如:<iostream>,<istream>,<ostream>,<sstream>。这些头文
件利用STL支持基于基本STL算法的输入输出。


posted on 2007-08-04 19:50  saintqdd  阅读(616)  评论(0)    收藏  举报