命名空间
变体
操作

C++ 命名要求: LegacyOutputIterator

来自 cppreference.com
 
 
C++ 命名要求
 

一个 LegacyOutputIterator 是一个 LegacyIterator,它可以写入指向的元素。

一个实现 LegacyOutputIterator 的类型示例是 std::ostream_iterator

LegacyForwardIteratorLegacyBidirectionalIteratorLegacyRandomAccessIterator 除了自身要求外还满足 LegacyOutputIterator 要求时,则将其描述为 **可变** 的。

内容

[编辑] 要求

类型 X 满足 LegacyOutputIterator 如果

并且,给定

  • o,某个可写入输出迭代器的类型的值(可能有多个可写入的类型,例如,如果 operator= 可能是一个模板。对于输入迭代器,没有 value_type 的概念)
  • r,类型为 X 的左值,

以下表达式必须有效,并具有指定的效应

表达式 返回值 等效表达式 先决条件 后置条件 备注
*r = o (未使用) r 可解引用 r 可递增 此操作后,r 不需要可解引用,并且 r 的任何先前值的副本也不需要可解引用或递增。
++r X& r 可递增 r++r 指定同一个迭代器对象,r 可解引用或超出范围 此操作后,r 不需要递增,并且 r 的任何先前值的副本也不需要可解引用或递增。
r++ 可转换为 const X& X temp = r;

++r;
return temp;

*r++ = o (未使用) *r = o;

++r;

[编辑] 备注

对输出迭代器使用 operator* 的唯一有效用法是在赋值左侧:operator* 可能返回一个代理对象,该对象定义了一个成员 operator=(它可能是一个模板)。

输出迭代器可能未定义相等和不相等。即使定义了 operator==x == y 也不一定意味着 ++x == ++y

通过同一个输出迭代器值的赋值只发生一次:对输出迭代器的算法必须是单遍算法。

通过输出迭代器的赋值预计与递增交替进行。双重递增是未定义的行为(C++ 标准目前声称支持双重递增,与 STL 文档相反;这是一个 LWG 问题 2035)。

纯输出迭代器允许将其 iterator_traits<X>::value_typeiterator_traits<X>::difference_typeiterator_traits<X>::pointeriterator_traits<X>::reference 声明为 void(并且诸如 std::back_insert_iterator 之类的迭代器确实如此 除了 difference_type,它现在被定义为满足 std::output_iterator (自 C++20 起))。

[编辑] 标准库

以下标准库迭代器是输出迭代器,而不是正向迭代器

[编辑] 参见

指定类型是给定值类型的输出迭代器,也就是说,可以向其写入该类型的值,并且它可以进行前递增和后递增
(概念) [编辑]
迭代器库 提供迭代器、迭代器特征、适配器和实用程序函数的定义