命名空间
变体
操作

C++ 命名要求: LegacyOutputIterator

来自 cppreference.cn
< cpp‎ | named req
 
 
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 起))。

[编辑] 标准库

以下标准库迭代器是输出迭代器,但不是前向迭代器

写入 std::basic_ostream 的输出迭代器
(类模板) [编辑]
写入 std::basic_streambuf 的输出迭代器
(类模板) [编辑]
用于插入到容器中的迭代器适配器
(类模板) [编辑]
用于在容器末尾插入的迭代器适配器
(类模板) [编辑]
用于在容器前端插入的迭代器适配器
(类模板) [编辑]

[编辑] 参见

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