Iterator(迭代器) 模式又称 Cursor(游标) 模式, 用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。 或者这样说可能更容易理解: Iterator模式是运用于聚合对象的一种模式, 通过运用该模式, 使得我们可以在不知道对象内部表示的情况下, 按照一定顺序(由 iterator 提供的方法) 访问聚合对象中的各个元素。
迭代器能够让迭代器与算法不干扰的相互发展, 最后又能无间隙的粘合起来;重载了 -> ,* ,++ ,--, ==, !=, == 运算符。 用以操作复杂的数据结构;容器提供迭代器, 算法使用迭代器;
迭代器分类
Input Iterators
input 迭代器只能一次一个向前读取元素, 按此顺序一个个传回元素值。 input 迭代器的各项操作
*iter | 读取实际元素 |
---|---|
iter->member | 读取实际元素的成员 |
++iter | 向前步进, 传回新位置 |
iter++ | 向前步进, 传回旧位置 |
iter1 == iter2 | 判断两个迭代器是否相等 |
TYPE(iter) | 复制迭代器(copy 构造函数) |
Output Iterators
output 迭代器哦和 input 迭代器相反, 其作用是将元素值一个个写入。 也就是说, 你只能一个元素一个元素地赋新值。 output 相关操作:
*iter = value | 将元素值写到迭代器位置 |
---|---|
++iter | 向前步进, 传回新位置 |
iter++ | 向后步进, 返回旧位置 |
TYPE(iter) | 复制迭代器(copy 构造函数) |
Forward Iterators
forword 迭代器是 input 和 output 迭代器的结合, 兼具了两者的功能, 更为普适的迭代器。 forword 迭代器的各项操作:
*iter | 存取实际元素 |
---|---|
iter->member | 读取实际元素的成员 |
++iter | 向前步进, 传回新位置 |
iter++ | 向前步进, 传回旧位置 |
iter1 == iter2 | 判断两个迭代器是否相等 |
TYPE(iter) | 复制迭代器(copy 构造函数) |
TYPE() | 产生迭代器(default 构造函数) |
iter1 = iter2 | 赋值 |
Bidirectional Iterators
bidirectional 迭代器在 forword 迭代器的基础上增加了回头遍历的能力。 换言之, 它支持一步步后退的操作。 新增操作:
--iter | 退步(传回新位置) |
---|---|
iter-- | 退步(传回旧位置 |
Random-Access Iterators
iter[n] | 取索引位置为 n 的元素 |
---|---|
iter += n | 向前跳 n 个元素 |
iter -= n | 向后跳 n 个元素 |
iter + n | 传回 iter 之后的第 n 个元素 |
n + iter | 传回 iter 之后的第 n 个元素 |
iter - n | 传回 iter 之前的第 n 个元素 |
iter1 - iter2 | 传回 iter1 和 iter2 之间的距离 |
iter1 < iter2 | 判断 iter1 是否在 iter2 之前 |
iter1 > iter2 | 判断 iter1 是否在 iter2 之后 |
iter1 <= iter2 | 判断 iter1 是否不在 iter2 之后 |
iter1 >= iter2 | 判断 iter1 是否不在 iter2 之前 |
常见容器的迭代器
容器 | 支持的迭代器类别 |
---|---|
vector | 随机访问 |
deque | 随机访问 |
list | 双向 |
set | 双向 |
multiset | 双向 |
map | 双向 |
multimap | 双向 |
stack | 不支持 |
queue | 不支持 |
priority_queue | 不支持 |
迭代器附加 Auxiliary(辅助) Iterator Functions
STL 提供了额外的 5 个函数, advance(),next(), prev(), distance(), and iter_swap(),前 4个函数, 是用于非 random-access Iterator, 可以实现多步跨越。 最后一个函数用于交换两个 iterator。
#include <iterator> |
---|
void advance (InputIterator& pos, Dist n) |
ForwardIterator next (ForwardIterator pos) ForwardIterator next (ForwardIterator pos, Dist n) |
BidirectionalIterator prev (BidirectionalIterator pos) BidirectionalIterator prev (BidirectionalIterator pos, Dist n) |
Dist distance (InputIterator pos1, InputIterator pos2) |
void iter_swap (ForwardIterator1 pos1, ForwardIterator2 pos2) |
版权属于:孟超
本文链接:https://mengchao.xyz/index.php/archives/445/
转载时须注明出处及本声明
好!OωO