STL迭代器简介

来源:互联网 发布:ipad 手写笔记软件 编辑:程序博客网 时间:2024/05/17 00:58

标准模板库(The Standard Template Library, STL)定义了五种迭代器。下面的图表画出了这几种:

 

            input         output

              /            /

                 forward

                     |

                bidirectional

                     |

               random access

要注意,上面这图表并不是表明它们之间的继承关系:而只是描述了迭代器的种类和接口处于图表下层的迭代器都是相对于处于图表上层迭代器的扩张集例如:forward迭代器不但拥有inputoutput迭代器的所有功能,还拥有更多的功能

   各个迭代器的功能如下:

迭代器类别

说明

输入

从容器中读取元素输入迭代器只能一次读入一个元素向前移动,输入迭代器只支持一遍算法,同一个输入迭代器不能两遍遍历一个序列

输出

向容器中写入元素输出迭代器只能一次一个元素向前移动输出迭代器只支持一遍算法,统一输出迭代器不能两次遍历一个序列

正向

组合输入迭代器和输出迭代器的功能,并保留在容器中的位置

双向

组合正向迭代器和逆向迭代器的功能,支持多遍算法

随机访问

组合双向迭代器的功能与直接访问容器中任何元素的功能,即可向前向后跳过任意个元素

 

下表中,每种迭代器均可进行包括表中前一种迭代器可进行的操作

所有迭代器:

p++

前置自增迭代器

++p

后置自增迭代器

输入迭代器:

*p

复引用迭代器,作为右值

注:此时以容器作为输入源,读容器

 p=p1

将一个迭代器赋给另一个迭代器

p==p1

比较迭代器的相等性

 p!=p1

比较迭代器的不等性

输出迭代器:

*p

复引用迭代器,作为左值

注:输出到容器,写容器

 p=p1

将一个迭代器赋给另一个迭代器

正向迭代器:

提供输入输出迭代器的所有功能。

双向迭代器:

--p

前置自减迭代器

 p--

后置自减迭代器

随机迭代器:

p+=i

将迭代器递增i

p-=i

将迭代器递减i

p+i

p位加i位后的迭代器

p-i

p位减i位后的迭代器

p[i]

返回p位元素偏离i位的元素引用

p<p1

如果迭代器p的位置在p1前,返回true,否则返回false

p<=p1

p的位置在p1的前面或同一位置时返回true,否则返回false

p>p1

如果迭代器p的位置在p1后,返回true,否则返回false

p>=p1

p的位置在p1的后面或同一位置时返回true,否则返回false

 

   下面列举了些例子说明各个容器的用法:
1
vector

2deque

3list

4set

5multiset

6map

7multimap

8stack

9queue

10priority_queue

mapset list 类型提供双向迭代器,而 stringvector deque 容器上定义的迭代器都是随机访问迭代器都是随机访问迭代器,用作访问内置数组元素的指针也是随机访问迭代器istream_iterator 是输入迭代器,而 ostream_iterator 则是输出迭代器

   更多迭代器介绍可参考C++ Primer11.3

 

   转载:http://blog.csdn.net/weide001/archive/2009/07/03/4319212.aspx