<iterator>
header
迭代器定义
一个迭代器可以是指向一定范围内的数组或者容器中的元素,具有在一定范围内数组进行迭代的操作集合(至少具有增量 ++ 能力和 dereference *
运算符)。
迭代器最明显的形式是指针。指针可以指向数组中的元素,并可以使用运算符 ++
迭代它们,但是也可能是其他种类的迭代器。例如,每个容器类型(例如list)具有一个特定的迭代器类型,旨在迭代其元素。
请注意,虽然指针是迭代器的一种形式,但并非所有迭代器都具有相同的指针功能;
迭代器类别
迭代器根据他们的功能分为五类:
Input 和 output 迭代器是最有限的迭代器类型:它们可以执行顺序单通道输入或输出操作。
Forward iterators 具有 input iterators 所有功能,并且如果它们不是常量迭代器也是 output iterators 的功能, 尽管它们仅限于迭代范围(前向)的一个方向. 所有 standard containers 至少支持前向迭代器类型。
Bidirectional iterators 就像 forward iterators 但也可以向后迭代。
Random-access iterators 实现了 bidirectional iterators 所有的功能, 并且还能够非顺序访问范围: 通过将迭代值应用于迭代器而不迭代其间的所有元素,可以直接访问远程元素。这些迭代器具有与标准指针类似的功能(指针是此类别的迭代器)。
迭代器类别的属性:
类别 | 特性 | 表达 | |||
---|---|---|---|---|---|
所有类别 | copy-constructible, copy-assignable and destructible | X b(a); | |||
Can be incremented | ++a | ||||
Random Access | Bidirectional | Forward | Input | Supports equality/inequality comparisons | a == b |
Can be dereferenced as an rvalue | *a a->m | ||||
Output | Can be dereferenced as an lvalue (only for mutable iterator types) | *a = t *a++ = t | |||
default-constructible | X a; X() | ||||
Multi-pass: neither dereferencing nor incrementing affects dereferenceability | { b=a; *a++; *b; } | ||||
Can be decremented | --a a-- *a-- | ||||
Supports arithmetic operators + and - | a + n n + a a - n a - b | ||||
Supports inequality comparisons (<, >, <= and >=) between iterators | a < b a > b a <= b a >= b | ||||
Supports compound assignment operations += and -= | a += n a -= n | ||||
Supports offset dereference operator ([]) | a[n] |
其中 X 是迭代器类型,a 和 b 是此迭代器类型的对象,t 是迭代器类型指向的类型的对象,n 是整数值。
有关更多详细信息,请参阅 input iterator, output iterator, forward iterator, bidirectional iterator 和 random-access iterator.
功能
迭代器操作:
迭代器向前推进
返回两个迭代器之间的距离
将迭代器返回到开头(增长方向:begin -> end)
将迭代器返回到结尾
获取前一个元素的迭代器
获取下一个元素的迭代器
迭代器生成:
从尾部插入元素
从首部插入元素
从指定位置插入一段元素
Construct move iterator (function template )
类
迭代器基类
迭代器特征
预定义的迭代器
反转迭代器
移动迭代器
后插入迭代器
前插入迭代器
插入迭代器
Istream迭代器
Ostream迭代器
输入流缓冲区迭代器
输出流缓冲区迭代器
类别标签
输入迭代器类别
输出迭代器类别
转发迭代器类
双向迭代器类
随机访问迭代器类