Namespaces
Variants

Experimental library header <experimental/ranges/iterator>

From cppreference.net
Standard library headers
Experimental library headers
Execution P2300
<experimental/execution>
Filesystem TS
<experimental/filesystem>
Parallelism TS (v1, v2)
experimental/algorithm
experimental/execution_policy
experimental/exception_list
experimental/numeric
<experimental/simd>
experimental/task_block
Library Fundamentals TS (v1, v2, v3)
experimental/algorithm
<experimental/any>
experimental/array
experimental/chrono
experimental/deque
experimental/forward_list
<experimental/functional>
experimental/future
experimental/iterator
experimental/list
experimental/map
experimental/memory
<experimental/memory_resource>
experimental/numeric
<experimental/optional>
experimental/propagate_const
experimental/random
experimental/ratio
experimental/regex
experimental/scope
experimental/set
experimental/source_location
experimental/string
<experimental/string_view>
experimental/system_error
experimental/tuple
experimental/type_traits
experimental/unordered_map
experimental/unordered_set
experimental/utility
experimental/vector

Concurrency TS
experimental/atomic
experimental/barrier
experimental/future
experimental/latch
Ranges TS
Coroutines TS
experimental/coroutine
Networking TS
experimental/buffer
experimental/executor
experimental/internet
experimental/io_context
<experimental/net>
experimental/netfwd
experimental/socket
experimental/timer
Reflection TS
<experimental/reflect>

此头文件属于 ranges 库。

目录

迭代器相关概念

定义于 命名空间 std::experimental::ranges

迭代器概念

规定类型可通过应用 * 运算符进行读取
(概念)
规定值可被写入迭代器所引用的对象
(概念)
规定 Semiregular 类型可通过前置和后置递增运算符进行自增
(概念)
规定对 WeaklyIncrementable 类型的递增操作保持相等性,且该类型为 EqualityComparable
(概念)
规定类型的对象可被递增和解引用
(概念)
规定类型的对象是 Iterator 类型的哨位
(概念)
规定可对迭代器和哨位应用 - 运算符以在常数时间内计算其差值
(概念)
规定类型为输入迭代器,即可读取其引用值且支持前置和后置递增
(概念)
规定类型是给定值类型的输出迭代器,即可向其写入该类型的值且支持前置和后置递增
(概念)
规定 InputIterator 为前向迭代器,支持相等比较和多趟遍历
(概念)
规定 ForwardIterator 为双向迭代器,支持向后移动
(概念)
规定 BidirectionalIterator 为随机访问迭代器,支持常数时间内的前进后退和下标操作
(概念)

间接可调用概念

规定可调用类型可通过解引用 Readable 类型的结果进行调用
(概念)
规定可调用对象在通过解引用 Readable 类型的结果调用时满足 Predicate
(概念)
规定可调用对象在通过解引用某些 Readable 类型的结果调用时满足 Relation
(概念)
规定可调用对象在通过解引用某些 Readable 类型的结果调用时满足 StrictWeakOrder
(概念)

通用算法要求

规定值可以从 Readable 类型移动至 Writable 类型
(概念)
规定值可以从 Readable 类型移动至 Writable 类型,且可通过中间对象执行移动操作
(概念)
规定值可以从 Readable 类型复制至 Writable 类型
(概念)
规定值可以从 Readable 类型复制至 Writable 类型,且可通过中间对象执行复制操作
(概念)
规定两个 Readable 类型所引用的值可以交换
(概念)
规定两个 Readable 类型所引用的值可以比较
(概念)
规定原地重排元素的算法的通用要求
(概念)
规定通过复制元素将有序序列合并到输出序列的算法的要求
(概念)
规定将序列排列为有序序列的算法的通用要求
(概念)

概念工具

计算在一组 Readable 类型解引用结果上调用可调用对象的结果
(类模板)
用于指定接受投影操作的算法约束的辅助模板
(类模板)

迭代器原语

迭代器工具

定义于命名空间 std::experimental::ranges
将解引用对象的结果转换为其关联的右值引用类型
(定制点对象)
交换两个可解引用对象所引用的值
(定制点对象)

迭代器特征

定义于命名空间 std::experimental::ranges
获取 WeaklyIncrementable 类型的差值类型
(类模板)
获取 Readable 类型的值类型
(类模板)
获取输入迭代器类型的迭代器类别
(类模板)
收集迭代器关联类型的兼容性特征类
(别名模板)
获取可解引用对象的关联引用类型
(别名模板)

迭代器类别标签

定义于命名空间 std::experimental::ranges
用于指示迭代器类别的空类类型
(类)

std::iterator_traits 特化

定义于命名空间 std
特化 std::iterator_traits 以支持范围TS迭代器
(类模板特化)

迭代器操作

定义于 命名空间 std::experimental::ranges
将迭代器前进指定距离
(函数模板)
返回迭代器与哨位之间的距离,或范围起始与末尾之间的距离
(函数模板)
递增迭代器
(函数模板)
递减迭代器
(函数模板)

迭代器适配器

定义于命名空间 std::experimental::ranges
用于反向遍历的迭代器适配器
(类模板)
用于容器尾部插入的迭代器适配器
(类模板)
用于容器前端插入的迭代器适配器
(类模板)
用于容器插入的迭代器适配器
(类模板)
解引用为右值引用的迭代器适配器
(类模板)
move_iterator 配合使用的哨兵适配器
(类模板)
将迭代器-哨兵对适配为通用迭代器类型以用于传统算法
(类模板)
跟踪与起始位置距离的迭代器适配器
(类模板)
用于知晓自身范围边界的迭代器类型的空哨兵类型
(类)
可能悬垂的迭代器的包装器
(类模板)
dangling 包装右值范围迭代器类型的别名模板
(别名模板)
与任意迭代器配合使用以表示无限范围的哨兵类型
(类)

流迭代器

定义于 命名空间 std::experimental::ranges
std::basic_istream 读取的输入迭代器
(类模板)
写入到 std::basic_ostream 的输出迭代器
(类模板)
std::basic_streambuf 读取的输入迭代器
(类模板)
写入到 std::basic_streambuf 的输出迭代器
(类模板)

概要

namespace std { namespace experimental { namespace ranges { inline namespace v1 {
template <class T> concept bool /* 可解引用 */ // 仅用于说明
  = requires(T& t) { {*t} -> auto&&; };
namespace {
  constexpr /* 未指定 */ iter_move = /* 未指定 */;
  constexpr /* 未指定 */ iter_swap = /* 未指定 */;
}
template <class> struct difference_type;
template <class T> using difference_type_t
  = typename difference_type<T>::type;
template <class> struct value_type;
template <class T> using value_type_t
  = typename value_type<T>::type;
template <class> struct iterator_category;
template <class T> using iterator_category_t
  = typename iterator_category<T>::type;
template </* 可解引用 */ T> using reference_t
  = decltype(*declval<T&>());
template </* 可解引用 */ T>
    requires /* 参见定义 */ using rvalue_reference_t
  = decltype(ranges::iter_move(declval<T&>()));
template <class In>
concept bool Readable = /* 参见定义 */;
template <class Out, class T>
concept bool Writable = /* 参见定义 */;
template <class I>
concept bool WeaklyIncrementable = /* 参见定义 */;
template <class I>
concept bool Incrementable = /* 参见定义 */;
template <class I>
concept bool Iterator = /* 参见定义 */;
template <class S, class I>
concept bool Sentinel = /* 参见定义 */;
template <class S, class I>
  constexpr bool disable_sized_sentinel = false;
template <class S, class I>
concept bool SizedSentinel = /* 参见定义 */;
template <class I>
concept bool InputIterator = /* 参见定义 */;
template <class I>
concept bool OutputIterator = /* 参见定义 */;
template <class I>
concept bool ForwardIterator = /* 参见定义 */;
template <class I>
concept bool BidirectionalIterator = /* 参见定义 */;
template <class I>
concept bool RandomAccessIterator = /* 参见定义 */;
template <class F, class I>
concept bool IndirectUnaryInvocable = /* 参见定义 */;
template <class F, class I>
concept bool IndirectRegularUnaryInvocable = /* 参见定义 */;
template <class F, class I>
concept bool IndirectUnaryPredicate = /* 参见定义 */;
template <class F, class I1, class I2 = I1>
concept bool IndirectRelation = /* 参见定义 */;
template <class F, class I1, class I2 = I1>
concept bool IndirectStrictWeakOrder = /* 参见定义 */;
template <class> struct indirect_result_of;
template <class F, class... Is>
  requires Invocable<F, reference_t<Is>...>
struct indirect_result_of<F(Is...)>;
template <class F>
using indirect_result_of_t
  = typename indirect_result_of<F>::type;
template <Readable I, IndirectRegularUnaryInvocable<I> Proj>
struct projected;
template <WeaklyIncrementable I, class Proj>
struct difference_type<projected<I, Proj>>;
<span class