<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_iterator C++20 |
指定可以向前和向后读取和写入的迭代器。 |
contiguous_iterator C++20 |
指定一个迭代器,其元素在内存中按顺序排列,大小相同,并且可以使用指针算术进行访问。 |
forward_iterator C++20 |
指定可以进行多次读取(可能可以写入)的迭代器。 |
input_iterator C++20 |
指定至少可以进行一次读取的迭代器。 |
input_or_output_iterator C++20 |
迭代器概念分类的基础。 |
output_iterator |
指定可以写入的迭代器。 |
random_access_iterator C++20 |
指定可以按索引读取和写入的迭代器。 |
sentinel_for C++20 |
指定迭代器类型的 sentinel。 |
sized_sentinel_for C++20 |
指定迭代器及其 sentinel 可以相减(使用 - ),以查找其常量时间方面的差异。 |