# 标准库头文件 <experimental/ranges/range>

< cpp‎ | header‎ | experimental

此头文件是范围库的一部分。

### 范围概念

定义于命名空间 `std::experimental::ranges`
Range | 指定类型为范围，即它提供 `begin` 迭代器和 `end` 哨位 (概念)
SizedRange | 指定范围以常数时间知晓其大小 (概念)
View | 指定范围为视图，即它拥有常数时间的复制/移动/赋值 (概念)
BoundedRange | 指定范围拥有等同的迭代器和哨位类型 (概念)
InputRange | 指定范围的迭代器满足 `InputIterator` (概念)
OutputRange | 指定范围的迭代器满足 `OutputIterator` (概念)
ForwardRange | 指定范围的迭代器满足 `ForwardIterator` (概念)
BidirectionalRange | 指定范围的迭代器满足 `BidirectionalIterator` (概念)
RandomAccessRange | 指定范围的迭代器满足 `RandomAccessIterator` (概念)

### 范围访问

定义于命名空间 `std::experimental::ranges`
begin cbegin | 返回指向范围起始的迭代器 (定制点对象)
end cend | 返回指向范围末尾的迭代器 (定制点对象)
rbegin crbegin | 获得指向范围的逆向迭代器 (定制点对象)
rend crend | 获得指向范围的逆向尾迭代器 (定制点对象)

### 范围原语

定义于命名空间 `std::experimental::ranges`
size | 获得能在常数时间计算大小的范围的大小 (定制点对象)
empty | 检查范围是否为空 (定制点对象)
data cdata | 获得指向连续范围起始的指针 (定制点对象)
iterator_t sentinel_t | 获得范围的迭代器类型与哨位类型 (别名模板)

### 概要

    #include <experimental/ranges/iterator>

    namespace std { namespace experimental { namespace ranges { inline namespace v1 {

    namespace {
      constexpr /* 未指明 */ begin = /* 未指明 */;
      constexpr /* 未指明 */ end = /* 未指明 */;
      constexpr /* 未指明 */ cbegin = /* 未指明 */;
      constexpr /* 未指明 */ cend = /* 未指明 */;
      constexpr /* 未指明 */ rbegin = /* 未指明 */;
      constexpr /* 未指明 */ rend = /* 未指明 */;
      constexpr /* 未指明 */ crbegin = /* 未指明 */;
      constexpr /* 未指明 */ crend = /* 未指明 */;
    }

    namespace {
      constexpr /* 未指明 */ size = /* 未指明 */;
      constexpr /* 未指明 */ empty = /* 未指明 */;
      constexpr /* 未指明 */ data = /* 未指明 */;
      constexpr /* 未指明 */ cdata = /* 未指明 */;
    }

    template <class T>
    using iterator_t = decltype(ranges::begin(declval<T&>()));

    template <class T>
    using sentinel_t = decltype(ranges::end(declval<T&>()));

    template <class>
    constexpr bool disable_sized_range = false;

    template <class T>
    struct enable_view { };

    struct view_base { };

    template <class T>
    concept bool Range = /* 见定义 */;

    template <class T>
    concept bool SizedRange = /* 见定义 */;

    template <class T>
    concept bool View = /* 见定义 */;

    template <class T>
    concept bool BoundedRange = /* 见定义 */;

    template <class T>
    concept bool InputRange = /* 见定义 */;

    template <class R, class T>
    concept bool OutputRange = /* 见定义 */;

    template <class T>
    concept bool ForwardRange = /* 见定义 */;

    template <class T>
    concept bool BidirectionalRange = /* 见定义 */;

    template <class T>
    concept bool RandomAccessRange = /* 见定义 */;

    }}}}