<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);
b = a; |
| Can be incremented |
++a
a++ |
| Random Access |
Bidirectional |
Forward |
Input |
Supports equality/inequality comparisons |
a == b
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.
功能
迭代器操作:
advance
迭代器向前推进
distance
返回两个迭代器之间的距离
begin
将迭代器返回到开头(增长方向:begin -> end)
end
将迭代器返回到结尾
prev
获取前一个元素的迭代器
next
获取下一个元素的迭代器
迭代器生成:
back_inserter
从尾部插入元素
front_inserter
从首部插入元素
inserter
从指定位置插入一段元素
make_move_iterator
Construct move iterator (function template )
类
iterator
迭代器基类
iterator_traits
迭代器特征
预定义的迭代器
reverse_iterator
反转迭代器
move_iterator
移动迭代器
back_insert_iterator
后插入迭代器
front_insert_iterator
前插入迭代器
insert_iterator
插入迭代器
istream_iterator
Istream迭代器
ostream_iterator
Ostream迭代器
istreambuf_iterator
输入流缓冲区迭代器
ostreambuf_iterator
输出流缓冲区迭代器
类别标签
input_iterator_tag
输入迭代器类别
output_iterator_tag
输出迭代器类别
forward_iterator_tag
转发迭代器类
bidirectional_iterator_tag
双向迭代器类
random_access_iterator_tag
随机访问迭代器类 |