命名空间
变体
操作

C++ 命名要求: LegacyOutputIterator

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围




Container(容器)
容器元素
迭代器 (Iterator)
LegacyOutputIterator(传统输出迭代器)
流 I/O
格式化器
(C++20)
随机数
并发
(C++11)
Ranges
多维视图
其他

 

LegacyOutputIterator 是一个可以写入所指向元素的 LegacyIterator

实现 LegacyOutputIterator 类型的例子是 std::ostream_iterator

LegacyForwardIteratorLegacyBidirectionalIteratorLegacyRandomAccessIterator 除了满足其自身要求外,还满足 LegacyOutputIterator 要求时,它被称为 mutable

目录

[编辑] 要求

类型 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 issue 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的输出迭代器
(类模板) [编辑]
用于在容器中插入的迭代器适配器
(类模板) [编辑]
用于在容器末尾插入的迭代器适配器
(类模板) [编辑]
用于在容器前端插入的迭代器适配器
(类模板) [编辑]

[编辑] 参阅

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