C++ 概念: OutputIterator

来自cppreference.com
< cpp‎ | concept
 
 
 

输出迭代器OutputIterator)是能写入所指元素的迭代器Iterator)。

实现输出迭代器(OutputIterator)的类型的例子是 std::ostream_iterator

向前迭代器ForwardIterator)、双向迭代器BidirectionalIterator)或随机访问迭代器RandomAccessIterator)在自身的要求之上满足的输出迭代器(OutputIterator)要求时,它被描述为可变的。

目录

[编辑] 要求

类型 X 满足输出迭代器(OutputIterator),若

  • 类型 X 满足迭代器Iterator
  • X 是类类型或指针类型

且,给定

  • o ,可写入输出迭代器的某类型的值(可以有多种写入的类型,例如若 operator= 可以是模板。没有像输入迭代器的 value_type 那种记号)
  • r ,类型 X 的左值,

则下列表达式必须合法且拥有其指定的效应

表达式 返回 等价表达式 前置条件 后置条件 注意
*r = o (不使用) r 可解引用 r 可自增 在此操作后 r 不要求可解引用且任何 r 先前值的副本不再要求可解引用或可自增。
++r X& r 可自增 &r == &++rr 可解引用或为末尾后 在此操作后 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_type, iterator_traits<X>::difference_typeiterator_traits<X>::pointeriterator_traits<X>::referencevoid (且迭代器如 std::back_insert_iterator 正是这么做的)。

[编辑] 标准库

下列的标准库迭代器是输出迭代器且非向前迭代器:

  • std::ostream_iterator
  • std::ostreambuf_iterator
  • std::insert_iterator
  • std::back_insert_iterator
  • std::front_insert_iterator

[编辑] 参阅