STL源码剖析---迭代器

一、迭代器

迭代器五种相应型别:

1. valuetype,是指迭代器所指对象的型别。

2. differencetype,用来表示迭代器之间的距离,可以用来表示一个容器的最大容量。例如STL中的count()函数,其返回值就是difference type。

3. referencetype,在C++中如果要传回左值都是以by reference的方式进行。

4. pointertype,传回一个左值,令它代表p所指之物的地址也是可以的,也就是说我们能过传回一个pointer,指向迭代器所指之物。

5. iterator_category。

迭代器的五种类别:

1. inputiterator,这种迭代器所指的对象,不允许外界改变,只读。

2. outputiterator,只写

3. forwarditerator,允许写入型算法,在此种迭代器所形成的区间上进行读写操作。

4. bidirectionaliterator,可双向移动,某些算法需要逆向走访某个迭代区间,选用。

5. RandomAccess iterator,前四中迭代器都只供应一部分指针算术能力(前三种支持operate++,第四种再加上operate- -),第五种覆盖所有的指针算术能力,包括p+n,p-n,p[n],p1-p2,p1<p2。

容器

支持的迭代器类别

说明

vector

随机访问

一种随机访问的数组类型,提供了对数组元素进行快速随机访问以及在序列尾部进行快速的插入和删除操作的功能。可以再需要的时候修改其自身的大小

deque

随机访问

一种随机访问的数组类型,提供了序列两端快速进行插入和删除操作的功能。可以再需要的时候修改其自身的大小

list

双向

一种不支持随机访问的数组类型,插入和删除所花费的时间是固定的,与位置无关。

set

双向

一种随机存取的容器,其关键字和数据元素是同一个值。所有元素都必须具有惟一值。

multiset

双向

一种随机存取的容器,其关键字和数据元素是同一个值。可以包含重复的元素。

map

双向

一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个特定的关键字只能与一个元素关联。

multimap

双向

一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字。一个关键字可以与多个数据元素关联。

stack

不支持

适配器容器类型,用vectordequelist对象创建了一个先进后出容器

queue

不支持

适配器容器类型,用dequelist对象创建了一个先进先出容器

priority_queue

不支持

适配器容器类型,用vectordeque对象创建了一个排序队列

你可能感兴趣的:(STL源码剖析---迭代器)