<iterator>

定义预定义的迭代器和流迭代器、迭代器基元以及一些支持模板。

要求

标头<iterator>

命名空间:std

注解

迭代器是指针的泛化,允许 C++ 程序使用统一的方式来处理不同的数据结构。 算法对某一种迭代器所指定的值范围起作用,而不是作用于特定的数据类型。 算法可以作用于任何满足迭代器要求的数据结构。

在 C++20 中,有六种类别的迭代器。 迭代器按功能层次结构排列。 其功能由 C++20 概念指定。 有关各种迭代器及其功能的说明,请参阅迭代器概念

Visual Studio 为 C++ 标准库迭代器增加了一些扩展,以便支持检查迭代器和未检查迭代器的调试。 有关详细信息,请参阅安全库:C++ 标准库

成员

函数

名称 描述
advance 使迭代器递增指定数量的位置。
back_inserter 创建一个可以在指定容器的后面插入元素的迭代器。
begin 检索一个指向指定容器中第一个元素的迭代器。
cbegin 检索指向指定容器中第一个元素的只读迭代器。
cend 检索指向指定容器中最后元素之后的元素的只读迭代器。
crbegin 获取指向指定容器开头的反向只读迭代器。
crend 获取 crbegin() 返回结果末尾的 sentinel。
data 获取指向指定容器中第一个元素的指针。
distance 确定两个迭代器定址位置之间的增量数。
end 检索指向指定容器中最后一个元素之后的元素的迭代器。
empty 测试指定的容器是否为空。
front_inserter 创建一个可以在指定容器前面插入元素的迭代器。
inserter 一个可以在指定插入点向容器添加新元素的迭代器适配器。
make_checked_array_iterator 创建可由其他算法使用的 checked_array_iterator。 注意:此函数是 C++ 标准库的 Microsoft 扩展。 使用该函数实现的代码不可移植到不支持该 Microsoft 扩展的 C++ 标准生成环境中。
make_move_iterator 返回一个移动迭代器,其中包含所提供的迭代器作为其存储的基迭代器。
make_unchecked_array_iterator 创建可由其他算法使用的 unchecked_array_iterator。 注意:此函数是 C++ 标准库的 Microsoft 扩展。 使用该函数实现的代码不可移植到不支持该 Microsoft 扩展的 C++ 标准生成环境中。
next 迭代指定的次数并返回新的迭代器位置。
prev 反向迭代指定的次数并返回新的迭代器位置。
rbegin 获取指向指定容器开头的反向迭代器。
rend 获取指向指定容器末尾的 sentinel 的反向迭代器。
size 获取元素数。

运算符

名称 描述
operator!= 测试运算符左侧的迭代器对象是否等于右侧的迭代器对象。
operator== 测试运算符左侧的迭代器对象是否等于右侧的迭代器对象。
operator< 测试运算符左侧的迭代器对象是否小于右侧的迭代器对象。
operator<= 测试运算符左侧的迭代器对象是否小于或等于右侧的迭代器对象。
operator> 测试运算符左侧的迭代器对象是否大于右侧的迭代器对象。
operator>= 测试运算符左侧的迭代器对象是否大于或等于右侧的迭代器对象。
operator+ 将偏移量添加到迭代器,并返回在新偏移位置处发现插入元素的新 reverse_iterator
operator- 从另一个迭代器中减去一个迭代器并返回差值。

“属性” 描述
back_insert_iterator 此类模板描述了一个输出迭代器对象。 它将元素插入到 Container 类型的容器中,并通过它存储的受保护 pointer 对象(称为容器)访问此容器。
bidirectional_iterator_tag 一个为代表双向迭代器的 iterator_category 函数提供返回类型的类。
checked_array_iterator 一种使用随机访问检查迭代器来访问数组的类。 注意:此类是 C++ 标准库的 Microsoft 扩展。 使用该函数实现的代码不可移植到不支持该 Microsoft 扩展的 C++ 标准生成环境中。
forward_iterator_tag 一个为代表向前迭代器的 iterator_category 函数提供返回类型的类。
front_insert_iterator 此类模板描述了一个输出迭代器对象。 它将元素插入到 Container 类型的容器中,并通过它存储的受保护 pointer 对象(称为容器)访问此容器。
input_iterator_tag 一个为代表输入迭代器的 iterator_category 函数提供返回类型的类。
insert_iterator 此类模板描述了一个输出迭代器对象。 它将元素插入到 Container 类型的容器中,并通过它存储的受保护 pointer 对象(称为容器)访问此容器。 它也可以存储受保护的 iterator 对象(属于 Container::iterator 类),称为 iter
istream_iterator 此类模板描述了一个输入迭代器对象。 它从输入流中提取 Ty 类的对象,并通过它存储的、指向 basic_istream<Elem, Tr> 的 pointer 类型对象进行访问。
istreambuf_iterator 此类模板描述了一个输入迭代器对象。 它将 Elem 类的元素插入到输出流缓冲区,并通过它存储的、指向 basic_streambuf<Elem, Tr>pointer 类型对象进行访问。
iterator 类模板用作所有迭代器的基类型。
iterator_traits 一种模板 helper 类,可以提供与不同迭代器类型相关联的关键类型,以便用相同的方式引用这些迭代器。
move_iterator move_iterator 对象可以存储 RandomIterator 类型的随机访问迭代器。 它的行为类似于随机访问迭代器,但在解引用时除外。 operator* 的结果将隐式强制转换为 value_type&&:,以便形成 rvalue reference
ostream_iterator 此类模板描述了一个输出迭代器对象。 它将 Type 类的对象插入到输出流,并通过它存储的、指向 basic_ostream<Elem, Tr>pointer 类型对象进行访问。
ostreambuf_iterator 此类模板描述了一个输出迭代器对象。 它将 Elem 类的元素插入到输出流缓冲区,并通过它存储的、指向 basic_streambuf<Elem, Tr> 的 pointer 类型对象进行访问。
output_iterator_tag 一个为代表输出迭代器的 iterator_category 函数提供返回类型的类。
random_access_iterator_tag 一个为代表随机访问迭代器的 iterator_category 函数提供返回类型的类。
reverse_iterator 此类模板描述了一个行为类似于随机访问迭代器的对象,只不过方向相反。
unchecked_array_iterator 一种使用随机访问未检查迭代器来访问数组的类。 注意:此类是 C++ 标准库的 Microsoft 扩展。 使用该函数实现的代码不可移植到不支持该 Microsoft 扩展的 C++ 标准生成环境中。

概念

以下概念在 std 命名空间中定义。 它们适用于迭代器,还与 <ranges> 概念中所述范围的迭代器类别相关。

迭代器概念 说明
bidirectional_iteratorC++20 指定可以向前和向后读取和写入的迭代器。
contiguous_iteratorC++20 指定一个迭代器,其元素在内存中按顺序排列,大小相同,并且可以使用指针算术进行访问。
forward_iteratorC++20 指定可以进行多次读取(可能可以写入)的迭代器。
input_iteratorC++20 指定至少可以进行一次读取的迭代器。
input_or_output_iteratorC++20 迭代器概念分类的基础。
output_iterator 指定可以写入的迭代器。
random_access_iteratorC++20 指定可以按索引读取和写入的迭代器。
sentinel_forC++20 指定迭代器类型的 sentinel。
sized_sentinel_forC++20 指定迭代器及其 sentinel 可以相减(使用 -),以查找其常量时间方面的差异。

另请参阅

头文件引用
C++ 标准库中的线程安全
C++ 标准库参考