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

[编辑] 参阅

指定类型为给定值类型的输出迭代器,即能把该类型的值写入它,且它能前后自增
(概念) [编辑]