Experimental library header <experimental/ranges/iterator>
From cppreference.net
<
cpp
|
header
|
experimental
此头文件属于 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; }