# std::ranges::range

< cpp‎ | ranges

定义于头文件 `<ranges>` |  |
template< class T > concept range = requires(T& t) { ranges::begin(t); // 对向前迭代器保持相等性 ranges::end (t); }; |  | (C++20 起)

`range` 概念定义允许通过指代元素范围的迭代器和哨位，在其元素上迭代的类型。

### 语义要求

给定满足 decltype((E)) 为 T 的表达式 E ， T 实现 range 仅若：

- [ranges::begin(E), ranges::end(E)) 代表范围，且
- ranges::begin(E) 与 ranges::end(E) 均有均摊常量时间复杂度且不会以对于保持相等性的表达式可观察的方式更改 E 的值，且
- 若 ranges::begin(E) 的类型实现 `forward_iterator` ，则 ranges::begin(E) 保持相等性（换言之，向前迭代器支持多趟算法）

注意：在上述定义中，要求的表达式 ranges::begin(std::forward<T>(t)) 与 ranges::end(std::forward<T>(t)) 不要求隐式表达式变种。