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>>;
template <class In, class Out>
concept bool IndirectlyMovable = /* 查看定义 */;
template <class In, class Out>
concept bool IndirectlyMovableStorable = /* 查看定义 */;
template <class In, class Out>
concept bool IndirectlyCopyable = /* 查看定义 */;
template <class In, class Out>
concept bool IndirectlyCopyableStorable = /* 查看定义 */;
template <class I1, class I2 = I1>
concept bool IndirectlySwappable = /* 查看定义 */;
template <class I1, class I2, class R = equal_to<>, class P1 = identity,
    class P2 = identity>
concept bool IndirectlyComparable = /* 查看定义 */;
template <class I>
concept bool Permutable = /* 查看定义 */;
template <class I1, class I2, class Out,
    class R = less<>, class P1 = identity, class P2 = identity>
concept bool Mergeable = /* 查看定义 */;
template <class I, class R = less<>, class P = identity>
concept bool Sortable = /* 查看定义 */;
template <class Iterator> using iterator_traits = /* 查看定义 */;
template <Readable T> using iter_common_reference_t
  = common_reference_t<reference_t<T>, value_type_t<T>&>;
struct output_iterator_tag { };
struct input_iterator_tag { };
struct forward_iterator_tag : input_iterator_tag { };
struct bidirectional_iterator_tag : forward_iterator_tag { };
struct random_access_iterator_tag : bidirectional_iterator_tag { };
namespace {
  constexpr /* 未指定 */ advance = /* 未指定 */;
  constexpr /* 未指定 */ distance = /* 未指定 */;
  constexpr /* 未指定 */ next = /* 未指定 */;
  constexpr /* 未指定 */ prev = /* 未指定 */;
}
template <BidirectionalIterator I> class reverse_iterator;
template <class I1, class I2>
    requires EqualityComparableWith<I1, I2>
  constexpr bool operator==(
    const reverse_iterator<I1>& x,
    const reverse_iterator<I2>& y);
template <class I1, class I2>
    requires EqualityComparableWith<I1, I2>
  constexpr bool operator!=(
    const reverse_iterator<I1>& x,
    const reverse_iterator<I2>& y);
template <class I1, class I2>
    requires StrictTotallyOrderedWith<I1, I2>
  constexpr bool operator<(
    const reverse_iterator<I1>& x,
    const reverse_iterator<I2>& y);
template <class I1, class I2>
    requires StrictTotallyOrderedWith<I1, I2>
  constexpr bool operator>(
    const reverse_iterator<I1>& x,
    const reverse_iterator<I2>& y);
template <class I1, class I2>
    requires StrictTotallyOrderedWith<I1, I2>
  constexpr bool operator>=(
    const reverse_iterator<I1>& x,
    const reverse_iterator<I2>& y);
template <class I1, class I2>
    requires StrictTotallyOrderedWith<I1, I2>
  constexpr bool operator<=(
    const reverse_iterator<I1>& x,
    const reverse_iterator<I2>& y);
template <class I1, class I2>
    requires SizedSentinel<I1, I2>
  constexpr difference_type_t<I2> operator-(
    const reverse_iterator<I1>& x,
    const reverse_iterator<I2>& y);
template <RandomAccessIterator I>
  constexpr reverse_iterator<I> operator+(
    difference_type_t<I> n,
    const reverse_iterator<I>& x);
template <BidirectionalIterator I>
constexpr reverse_iterator<I> make_reverse_iterator(I i);
template <class Container> class back_insert_iterator;
template <class Container>
  back_insert_iterator<Container> back_inserter(Container& x);
template <class Container> class front_insert_iterator;
template <class Container>
  front_insert_iterator<Container> front_inserter(Container& x);
template <class Container> class insert_iterator;
template <class Container>
  insert_iterator<Container> inserter(Container& x, iterator_t<Container> i);
template <InputIterator I> class move_iterator;
template <class I1, class I2>
    requires EqualityComparableWith<I1, I2>
  constexpr bool operator==(
    const move_iterator<I1>& x, const move_iterator<I2>& y);
template <class I1, class I2>
    requires EqualityComparableWith<I1, I2>
  constexpr bool operator!=(
    const move_iterator<I1>& x, const move_iterator<I2>& y);
template <class I1, class I2>
    requires StrictTotallyOrderedWith<I1, I2>
  constexpr bool operator<(
    const move_iterator<I1>& x, const move_iterator<I2>& y);
template <class I1, class I2>
    requires StrictTotallyOrderedWith<I1, I2>
  constexpr bool operator<=(
    const move_iterator<I1>& x, const move_iterator<I2>& y);
template <class I1, class I2>
    requires StrictTotallyOrderedWith<I1, I2>
  constexpr bool operator>(
    const move_iterator<I1>& x, const move_iterator<I2>& y);
template <class I1, class I2>
    requires StrictTotallyOrderedWith<I1, I2>
  constexpr bool operator>=(
    const move_iterator<I1>& x, const move_iterator<I2>& y);
template <class I1, class I2>
    requires SizedSentinel<I1, I2>
  constexpr difference_type_t<I2> operator-(
    const move_iterator<I1>& x,
    const move_iterator<I2>& y);
template <RandomAccessIterator I>
  constexpr move_iterator<I> operator+(
    difference_type_t<I> n,
    const move_iterator<I>& x);
template <InputIterator I>
  constexpr move_iterator<I> make_move_iterator(I i);
template <Semiregular S> class move_sentinel;
template <class I, Sentinel<I> S>
  constexpr bool operator==(
    const move_iterator<I>& i, const move_sentinel<S>& s);
template <class I, Sentinel<I> S>
  constexpr bool operator==(
    const move_sentinel<S>& s, const move_iterator<I>& i);
template <class I, Sentinel<I> S>
  constexpr bool operator!=(
    const move_iterator<I>& i, const move_sentinel<S>& s);
template <class I, Sentinel<I> S>
  constexpr bool operator!=(
    const move_sentinel<S>& s, const move_iterator<I>& i);
template <class I, SizedSentinel<I> S>
  constexpr difference_type_t<I> operator-(
    const move_sentinel<S>& s, const move_iterator<I>& i);
template <class I, SizedSentinel<I> S>
  constexpr difference_type_t<I> operator-(
    const move_iterator<I>& i, const move_sentinel<S>& s);
template <Semiregular S>
  constexpr move_sentinel<S> make_move_sentinel(S s);
template <Iterator I, Sentinel<I> S>
  requires !Same<I, S>
class common_iterator;
template <Readable I, class S>
struct value_type<common_iterator<I, S>>;
template <InputIterator I, class S>
struct iterator_category<common_iterator<I, S>>;
template <ForwardIterator I, class S>
struct iterator_category<common_iterator<I, S>>;
template <class I1, class I2, Sentinel<I2> S1, Sentinel<I1> S2>
bool operator==(
  const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y);
template <class I1, class I2, Sentinel<I2> S1, Sentinel<I1> S2>
  requires EqualityComparableWith<I1, I2>
bool operator==(
  const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y);
template <class I1, class I2, Sentinel<I2> S1, Sentinel<I1> S2>
bool operator!=(
  const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y);
template <class I2, SizedSentinel<I2> I1, SizedSentinel<I2> S1, SizedSentinel<I1> S2>
difference_type_t<I2> operator-(
  const common_iterator<I1, S1>& x, const common_iterator<I2, S2>& y);
class default_sentinel;
template <Iterator I> class counted_iterator;
template <class I1, class I2>
    requires Common<I1, I2>
  constexpr bool operator==(
    const counted_iterator<I1>& x, const counted_iterator<I2>& y);
constexpr bool operator==(
  const counted_iterator<auto>& x, default_sentinel);
constexpr bool operator==(
  default_sentinel, const counted_iterator<auto>& x);
template <class I1, class I2>
    requires Common<I1, I2>
  constexpr bool operator!=(
    const counted_iterator<I1>& x, const counted_iterator<I2>& y);
constexpr bool operator!=(
  const counted_iterator<auto>& x, default_sentinel y);
constexpr bool operator!=(
  default_sentinel x, const counted_iterator<auto>& y);
template <class I1, class I2>
    requires Common<I1, I2>
  constexpr bool operator<(
    const counted_iterator<I1>& x, const counted_iterator<I2>& y);
template <class I1, class I2>
    requires Common<I1, I2>
  constexpr bool operator<=(
    const counted_iterator<I1>& x, const counted_iterator<I2>& y);
template <class I1, class I2>
    requires Common<I1, I2>
  constexpr bool operator>(
    const counted_iterator<I1>& x, const counted_iterator<I2>& y);
template <class I1, class I2>
    requires Common<I1, I2>
  constexpr bool operator>=(
    const counted_iterator<I1>& x, const counted_iterator<I2>& y);
template <class I1, class I2>
    requires Common<I1, I2>
  constexpr difference_type_t<I2> operator-(
    const counted_iterator<I1>& x, const counted_iterator<I2>& y);
template <class I>
  constexpr difference_type_t<I> operator-(
    const counted_iterator<I>& x, default_sentinel y);
template <class I>
  constexpr difference_type_t<I> operator-(
    default_sentinel x, const counted_iterator<I>& y);
template <RandomAccessIterator I>
  constexpr counted_iterator<I>
    operator+(difference_type_t<I> n, const counted_iterator<I>& x);
template <Iterator I>
  constexpr counted_iterator<I> make_counted_iterator(I i, difference_type_t<I> n);
class unreachable;
template <Iterator I>
  constexpr bool operator==(const I&, unreachable) noexcept;
template <Iterator I>
  constexpr bool operator==(unreachable, const I&) noexcept;
template <Iterator I>
  constexpr bool operator!=(const I&, unreachable) noexcept;
template <Iterator I>
  constexpr bool operator!=(unreachable, const I&) noexcept;
template <class T> class dangling;
template <class T, class CharT = char, class Traits = char_traits<CharT>,
    class Distance = ptrdiff_t>
  class istream_iterator;
template <class T, class CharT, class Traits, class Distance>
  bool operator==(const istream_iterator<T, CharT, Traits, Distance>& x,
    const istream_iterator<T, CharT, Traits, Distance>& y);
template <class T, class CharT, class Traits, class Distance>
  bool operator==(default_sentinel x,
    const istream_iterator<T, CharT, Traits, Distance>& y);
template <class T, class CharT, class Traits, class Distance>
  bool operator==(const istream_iterator<T, CharT, Traits, Distance>& x,
    default_sentinel y);
template <class T, class CharT, class Traits, class Distance>
  bool operator!=(const istream_iterator<T, CharT, Traits, Distance>& x,
    const istream_iterator<T, CharT, Traits, Distance>& y);
template <class T, class CharT, class Traits, class Distance>
  bool operator!=(default_sentinel x,
    const istream_iterator<T, CharT, Traits, Distance>& y);
template <class T, class CharT, class Traits, class Distance>
  bool operator!=(const istream_iterator<T, CharT, Traits, Distance>& x,
    default_sentinel y);
template <class T, class CharT = char, class Traits = char_traits<CharT>>
  class ostream_iterator;
template <class CharT, class Traits = char_traits<CharT> >
  class istreambuf_iterator;
template <class CharT, class Traits>
  bool operator==(const istreambuf_iterator<CharT, Traits>& a,
    const istreambuf_iterator<CharT, Traits>& b);
template <class CharT, class Traits>
  bool operator==(default_sentinel a,
    const istreambuf_iterator<CharT, Traits>& b);
template <class CharT, class Traits>
  bool operator==(const istreambuf_iterator<CharT, Traits>& a,
    default_sentinel b);
template <class CharT, class Traits>
  bool operator!=(const istreambuf_iterator<CharT, Traits>& a,
    const istreambuf_iterator<CharT, Traits>& b);
template <class CharT, class Traits>
  bool operator!=(default_sentinel a,
    const istreambuf_iterator<CharT, Traits>& b);
template <class CharT, class Traits>
  bool operator!=(const istreambuf_iterator<CharT, Traits>& a,
    default_sentinel b);
template <class CharT, class Traits = char_traits<CharT> >
  class ostreambuf_iterator;
}}}}
namespace std {
  template <experimental::ranges::Iterator Out>
    struct iterator_traits<Out>;
  template <experimental::ranges::InputIterator In>
    struct iterator_traits<In>;
  template <experimental::ranges::InputIterator In>
      requires experimental::ranges::哨兵<In, In>
    struct iterator_traits;
}