C++迭代器汇总(5种)
通过迭代器既可分离容器与算法,又可连接容器与算法。从容器的角度看,只需提供适当的迭代器,就可以遍历容器中的数据,而不必关心数据将用于何种操作;从算法的角度看,只需要通过迭代器操作数据,不必关心是什么类型的容器。
容器设计者只需要专注于容器的设计,算法设计者只需要专注于算法的设计,这样就可以很好地实现数据结构与算法的分离。
STL提供了五种基本的迭代器:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机迭代器。本文将针对这五种迭代器进行讲解。
输入迭代器只能读取元素一次,迭代器移动到下一个位置后,不能保证之前的迭代器还有效,即执行
如果有两个输入迭代器 itr1 和 itr2,且有 itr1==itr2,但这并不保证 ++itr1==++itr2,更不能保证 *(++itr1)==*(++itr2)。因此,使用输入迭代器读入的序列不能保证是可重复的。
输出迭代器也支持对序列进行单向遍历,当把迭代器移到下一个位置后,也不能保证之前的迭代器是有效的。
前向迭代器支持对序列进行可重复的单向遍历,可以多次解析一个迭代器指定的位置,因此可以对一个值进行多次读写。
前向迭代器去掉了输入迭代器与输出迭代器的一些不确定性,例如,如果有两个前向迭代器 itr1 和 itr2,且有 itr1==itr2,那么 ++itr1==++itr2 一定是成立的。前后两次使用相等的前向迭代器读取同一个序列,只要序列的值在这个过程中没有被改写,就一定会得到相同的结果。
随机访问迭代器(Random Iterator)是在双向迭代器的基础上又支持直接将迭代器向前或向后移动 n 个元素,而且还支持比较运算的操作。因此,随机访问迭代器的功能几乎和指针一样。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
容器设计者只需要专注于容器的设计,算法设计者只需要专注于算法的设计,这样就可以很好地实现数据结构与算法的分离。
STL提供了五种基本的迭代器:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机迭代器。本文将针对这五种迭代器进行讲解。
输入迭代器与输出迭代器
输入迭代器和输出迭代器是最基本、要求最低的迭代器,几乎所有的迭代器都具备这两个迭代器的功能。1) 输入迭代器
输入迭代器(Input Iterator)只能一次一个地向后读取元素,并按此顺序传回元素值。输入迭代器支持对序列进行不可重复的单向遍历。方法 | 含义 |
---|---|
*itr | 读取实际元素 |
itr->member | 读取实际元素的成员 |
++itr | 向前前进一个单位,传回新的位置 |
itr++ | 向前前进一个单位,传回旧的位置 |
itr1==itr/itr!=itr2 | 判断迭代器是否相等 |
itr1 =itr2 | 迭代器赋值 |
拷贝构造 | 复制迭代器 |
输入迭代器只能读取元素一次,迭代器移动到下一个位置后,不能保证之前的迭代器还有效,即执行
−−itr
不能保证还能读取到原来的元素。如果有两个输入迭代器 itr1 和 itr2,且有 itr1==itr2,但这并不保证 ++itr1==++itr2,更不能保证 *(++itr1)==*(++itr2)。因此,使用输入迭代器读入的序列不能保证是可重复的。
2) 输出迭代器
输出迭代器(Output Iterator)与输入迭代器相反,其作用是将元素逐个写入容器。输出迭代器也支持对序列进行单向遍历,当把迭代器移到下一个位置后,也不能保证之前的迭代器是有效的。
方法 | 含义 |
---|---|
*itr=val | 将元素写入迭代器位置 |
++itr | 向前前进一个单位,传回新的位置 |
itr++ | 向前前进一个单位,传回旧的位置 |
itr1=itr2 | 迭代器赋值 |
拷贝构造 | 复制迭代器 |
前向迭代器
前向迭代器(Forward Iterator)是输入迭代器和输出迭代器的集合,具有输入迭代器和输出迭代器的全部功能。前向迭代器支持对序列进行可重复的单向遍历,可以多次解析一个迭代器指定的位置,因此可以对一个值进行多次读写。
前向迭代器去掉了输入迭代器与输出迭代器的一些不确定性,例如,如果有两个前向迭代器 itr1 和 itr2,且有 itr1==itr2,那么 ++itr1==++itr2 一定是成立的。前后两次使用相等的前向迭代器读取同一个序列,只要序列的值在这个过程中没有被改写,就一定会得到相同的结果。
双向迭代器与随机访问迭代器
双向迭代器(Bidirectional Iterator)是在前向迭代器的基础上增加了一个反向操作,即双向迭代器既可以前进,又可以后退,因此它比前向迭代器新增一个功能,可以进行自减操作,如itr−−
或者−−itr
。随机访问迭代器(Random Iterator)是在双向迭代器的基础上又支持直接将迭代器向前或向后移动 n 个元素,而且还支持比较运算的操作。因此,随机访问迭代器的功能几乎和指针一样。
方法 | 含义 |
---|---|
itr[n] | 获取索引位置为 n 的元素 |
itr+=n itr-=n |
向前或者向后跳 n 个元素的位置 |
itr+n | 返回 itr 后第 n 个元素的位置 |
n+itr | 返回 itr 后第 n 个元素的位重 |
itr-n | 返回 itr 之前第 n 个元素的位置 |
itr1-itr2 | 返回 itr1 与 itr2 之间的距离 |
itr1<itr2 itr1>=itr2 |
判断 itr1 是否在 itr2 之前 |
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。