Namespaces
Variants

std::experimental::ranges:: iterator_category

From cppreference.net
template < class I >
struct iterator_category { } ;
(1)
template < class T >
struct iterator_category < T * > ;
(2)
template < class T >
struct iterator_category < const T > : iterator_category < T > { } ;
(3)
template < class T >

requires requires { typename T :: iterator_category ; }

struct iterator_category < T > ;
(4)

计算类 I 的迭代器类别(如果存在)。用户可为程序自定义类型特化 iterator_category

1) 主模板是一个空结构体。
2) 针对指针的特化。若 T 为对象类型,则提供成员类型 type 等于 ranges::random_access_iterator_tag 。否则不存在成员 type
3) 针对 const 限定类型的特化。
4) 针对定义了公开可访问成员类型 iterator_category 的类型的特化。若 T::iterator_category 与命名空间 std 中的某个迭代器类别标签相同或派生自该标签,则按如下方式映射到命名空间 ranges 中的对应标签。否则,提供成员类型 type 等于 T::iterator_category
  • T::iterator_category std::random_access_iterator_tag 相同或派生自该标签,则提供成员类型 type 等于 ranges::random_access_iterator_tag
  • 否则,若 T::iterator_category std::bidirectional_iterator_tag 相同或派生自该标签,则提供成员类型 type 等于 ranges::bidirectional_iterator_tag
  • 否则,若 T::iterator_category std::forward_iterator_tag 相同或派生自该标签,则提供成员类型 type 等于 ranges::forward_iterator_tag
  • 否则,若 T::iterator_category std::input_iterator_tag 相同或派生自该标签,则提供成员类型 type 等于 ranges::input_iterator_tag
  • 否则,若 T::iterator_category std::output_iterator_tag 相同或派生自该标签,则不提供成员 type

辅助别名模板

template < class T >
using iterator_category_t = typename ranges :: iterator_category < T > :: type ;
(范围TS)

示例

参见

用于指示迭代器类别的空类类型
(类)
用于指示迭代器类别的空类类型
(类)
收集迭代器关联类型的兼容性特征类
(别名模板)