C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- C++ 具名要求: 函数对象 (FunctionObject)
- C++ 具名要求: 二元谓词 (BinaryPredicate)
- C++ 具名要求: 可默认构造 (DefaultConstructible)
- C++ 具名要求: 可复制赋值 (CopyAssignable)
- C++ 具名要求: 可复制构造 (CopyConstructible)
- C++ 具名要求: 可移动赋值 (MoveAssignable) (C++11 起)
- C++ 具名要求: 可移动构造 (MoveConstructible) (C++11 起)
- C++ 具名要求: 可析构 (Destructible)
- C++ 具名要求: 可平凡复制 (TriviallyCopyable)
- C++ 具名要求: 可相等比较 (EqualityComparable)
- C++ 具名要求: 可小于比较 (LessThanComparable)
- C++ 具名要求: 比较 (Compare)
- C++ 具名要求: 字面类型 (LiteralType)
- C++ 具名要求: 简旧数据类型 (PODType)
- C++ 具名要求: 平凡类型 (TrivialType)
- C++ 具名要求: 标准布局类型 (StandardLayoutType)
- C++ 具名要求: 遗留向前迭代器 (LegacyForwardIterator)
- C++ 具名要求: 可交换 (Swappable)
- C++ 具名要求: 值可交换 (ValueSwappable)
- C++ 具名要求: 可空指针 (NullablePointer) (C++11 起)
- C++ 具名要求: 散列 (Hash)
- C++ 具名要求: 分配器 (Allocator)
- C++ 具名要求: 可调用 (Callable)
- C++ 具名要求: 谓词 (Predicate)
- C++ 具名要求: 容器 (Container)
- C++ 具名要求: 序列容器 (SequenceContainer)
- C++ 具名要求: 连续容器 (ContiguousContainer)
- C++ 具名要求: 可逆容器 (ReversibleContainer)
- C++ 具名要求: 关联容器 (AssociativeContainer)
- C++ 具名要求: 具分配器容器 (AllocatorAwareContainer)
- C++ 具名要求: 无序关联容器 (UnorderedAssociativeContainer)
- C++ 具名要求: 可默认插入 (DefaultInsertable)
- C++ 具名要求: 可复制插入 (CopyInsertable)
- C++ 具名要求: 可移动插入 (MoveInsertable) (C++11 起)
- C++ 具名要求: 可就位构造 (EmplaceConstructible) (C++11 起)
- C++ 具名要求: 可擦除 (Erasable)
- C++ 具名要求: 遗留迭代器 (LegacyIterator)
- C++ 具名要求: 遗留输出迭代器 (LegacyOutputIterator)
- C++ 具名要求: 遗留输入迭代器 (LegacyInputIterator)
- C++ 具名要求: 遗留双向迭代器 (LegacyBidirectionalIterator)
- C++ 具名要求: 遗留随机访问迭代器 (LegacyRandomAccessIterator)
- C++ 具名要求: 遗留连续迭代器 (LegacyContiguousIterator)
- C++ 具名要求: 常量表达式迭代器 (ConstexprIterator)
- C++ 具名要求: 有格式输入函数 (FormattedInputFunction)
- C++ 具名要求: 无格式输入函数 (UnformattedInputFunction)
- C++ 具名要求: 有格式输出函数 (FormattedOutputFunction)
- C++ 具名要求: 无格式输出函数 (UnformattedOutputFunction)
- C++ 具名要求: 种子序列 (SeedSequence)
- C++ 具名要求: 随机数引擎 (RandomNumberEngine)
- C++ 具名要求: 随机数分布 (RandomNumberDistribution)
- C++ 具名要求: 均匀随机位生成器 (UniformRandomBitGenerator)
- C++ 具名要求: 随机数引擎适配器 (RandomNumberEngineAdaptor)
- C++ 具名要求: 基本可锁定 (BasicLockable)
- C++ 具名要求: 可锁定 (Lockable)
- C++ 具名要求: 可定时锁定 (TimedLockable)
- C++ 具名要求: 互斥体 (Mutex)
- C++ 具名要求: 定时互斥体 (TimedMutex)
- C++ 具名要求: 共享互斥体 (SharedMutex)
- C++ 具名要求: 共享定时互斥体 (SharedTimedMutex)
- C++ 具名要求: 字符特征 (CharTraits)
- C++ 具名要求: 正则表达式特征 (RegexTraits)
- C++ 具名要求: 位掩码类型 (BitmaskType)
- C++ 具名要求: 数值类型 (NumericType)
- C++ 具名要求: 一元类型特征 (UnaryTypeTrait)
- C++ 具名要求: 二元类型特征 (BinaryTypeTrait)
- C++ 具名要求: 变换特征 (TransformationTrait)
- C++ 具名要求: 时钟 (Clock)
- C++ 具名要求: 平凡时钟 (TrivialClock)
- 注释
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
C++ 具名要求: 遗留输出迭代器 (LegacyOutputIterator)
遗留输出迭代器 (LegacyOutputIterator) 是能写入所指向元素的遗留迭代器 (LegacyIterator) 。
一个实现遗留输出迭代器 (LegacyOutputIterator) 的类型的例子是 std::ostream_iterator。
当遗留向前迭代器 (LegacyForwardIterator) 、遗留双向迭代器 (LegacyBidirectionalIterator) 或遗留随机访问迭代器 (LegacyRandomAccessIterator) 在自身的要求之外还满足遗留输出迭代器 (LegacyOutputIterator) 的要求时,它即被描述为可变的(mutable)。
要求
以下情况下,类型 X
满足遗留输出迭代器 (LegacyOutputIterator)
- 类型
X
满足遗留迭代器 (LegacyIterator) -
X
是类类型或指针类型
且,给定
-
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; |
|||
*r++ = o | (不使用) | *r = o; ++r; |
注解
operator*
对于输出迭代器的仅有的合法用法是在赋值的左侧:operator*
可以返回一个代理对象,它定义了成员 operator=
(可以是模板)
可以不对输出迭代器定义相等和不相等。即使定义了 operator==
,x == y
也不需要隐含 ++x == ++y
。
通过输出迭代器的同一值进行的赋值只会发生一次:输出迭代器上的算法必须是单趟算法。
预期通过输出迭代器的赋值与自增交替进行。双重自增是未定义行为(C++ 标准当前声称双重自增得到支持,这与 STL 文档相反;此为 LWG2035)
允许纯粹仅支持输出的迭代器声明其 iterator_traits<X>::value_type
、iterator_traits<X>::difference_type
、iterator_traits<X>::pointer
与 iterator_traits<X>::reference
为 void(如 std::back_insert_iterator 这样的迭代器正如此)。
标准库
下列的标准库迭代器是输出迭代器而非向前迭代器:
- std::ostream_iterator
- std::ostreambuf_iterator
- std::insert_iterator
- std::back_insert_iterator
- std::front_insert_iterator
参阅
指定类型为给定值类型的输出迭代器,即能把该类型的值写入它,且它能前后自增 (概念) |