指针与数组 指针与其它数据结构呢?比如说链表? 存储空间是非连续的。不能通过对指向这种数据结构的指针做累加来遍历。 能不能提供一个行为类似指针的类,来对非数组的数据结构进行遍历呢?这样我们就能够以同样的方式来遍历所有数据结构(容器)。 迭代器(Iterator)是指针(pointer)的泛化,它允许程序员以相同的方式处理不同的数据结构(容器)。STL中有五种类型的迭代器,它们分别满足一定的要求。不同的迭代器要求定义的操作不一样。 箭头表示左边的迭代器一定满足右边迭代器需要的条件。 下面的图表画出了这几种: input output 要注意,上面这图表并不是表明它们之间的继承关系:而只是描述了迭代器的种类和接口。处于图表下层的迭代器都是相对于处于图表上层迭代器的扩张集。例如:forward迭代器不但拥有input和output迭代器的所有功能,还拥有更多的功能。 比如某个算法需要一个双向迭代器(Bidirctional Iterator),你可以把一个任意存取迭代器(Random Access Iterator)作为参数;但反之不行。 迭代器iterator 提供了一种一般化的方法对顺序或关联容器类型中的每个元素进行连续访问 例如,假设iter为任意容器类型的一个iterator,则++iter 表示向前移动迭代器使其指向容器的下一个元素,而*iter 返回iterator 指向元素的值,每种容器类型都提供一个begin()和一个end()成员函数。 begin()返回一个iterator 它指向容器的第一个元素 end()返回一个iterator 它指向容器的末元素的下一个位置 通过迭代器,我们可以用相同的方式来访问、遍历容器。 不同容器提供自己的迭代器,所以不同迭代器具有不同的能力。 迭代器的作用:
各个迭代器的功能如下:
迭代器的操作: 每种迭代器均可进行包括表中前一种迭代器可进行的操作。
只有顺序容器和关联容器支持迭代器遍历,各容器支持的迭代器的类别如下:
下面列举了些例子说明各个容器的用法: 1、vector
2、deque
3、list
4、set
5、multiset
6、map
7、multimap
8、stack
9、queue
10、priority_queue
|
|
来自: LibraryPKU > 《C/C++》