【OI笔记】$\mathtt{Iterator}$
在 STL 的定义中,迭代器根据其支持的操作依次分为以下几类:
-
\(InputIterator\)(输入迭代器):只要求支持拷贝、自增和解引访问。
-
\(OutputIterator\)(输出迭代器):只要求支持拷贝、自增和解引赋值。
-
\(ForwardIterator\)(向前迭代器):同时满足 \(InputIterator\) 和 \(OutputIterator\) 的要求。
-
\(BidirectionalIterator\)(双向迭代器):在 \(ForwardIterator\) 的基础上支持自减(即反向访问)。
-
\(RandomAccessIterator\)(随机访问迭代器):在 BidirectionalIterator 的基础上支持加减运算和比较运算(即随机访问)。
感觉这分类鸟用没有啊,时间复杂度、空间复杂度等等莫得区别/kb
\(Iterator\) 作为 \(STL function\) 的参数:
-
使用
next(iter)
获取 \(ForwardIterator\)iter
的后继。 -
使用
prev(iter)
获取 \(BidirectionalIterator\)iter
的前驱。
但是我认为叭,既然 \(STL\) 定义中这几个迭代器的分类没有互斥,所以我觉得向前迭代器、双向迭代器、随机访问迭代器都可以使用prev()
函数求前驱。同理,双向迭代器、随机访问迭代器都可以使用next()
函数求后继。
\(Iterator\) 的声明:
std::containerName<typeName,...>::iterator name;