考虑到不同的实际需要,更主要的是效率的需要,我们可以选择不同的容器来实现我们的程序,以此达到我们提高性能的目的。这也是用好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 |