Namespaces
Variants

std::experimental::ranges:: distance

From cppreference.net
namespace {

constexpr /* 未指定 */ distance = /* 未指定 */ ;

}
(ranges TS)
(定制点对象)
调用签名
template < Iterator I, Sentinel < I > S >
constexpr ranges :: difference_type_t < I > distance ( I first, S last ) ;
(1)
template < Range R >
constexpr ranges :: difference_type_t < ranges:: iterator_t < R >> distance ( R && r ) ;
(2)
template < SizedRange R >
constexpr ranges :: difference_type_t < ranges:: iterator_t < R >> distance ( R && r ) ;
(3)

返回 first last 之间的距离,或范围 r 的起始与末尾之间的距离。

1) 若满足 SizedSentinel < S, I > ,则等价于 return last - first ; 。否则,返回从 first last 所需的递增次数。若 [ first , last ) 不构成有效范围,则 I S 必须为相同类型且必须满足 SizedSentinel 概念,同时 [ last , first ) 必须构成有效范围。否则行为未定义。
2) 等价于 return ranges:: distance ( ranges:: begin ( r ) , ranges:: end ( r ) ) ;
3) 等价于 return ranges:: size ( r ) ;

实例化重载 (2,3) 可能在实例化点之前未包含头文件 <experimental/ranges/range> 时导致格式错误。

目录

定制点对象

名称 ranges::distance 表示一个 定制点对象 ,它是一个字面量 Semiregular 类类型(为说明目的记为 DistanceT )的 函数对象 DistanceT 的所有实例都是等价的。因此, ranges::distance 可以被自由复制,其副本可以互换使用。

给定一组类型 Args... ,若 std:: declval < Args > ( ) ... 满足上述对 ranges::distance 参数的要求,则 DistanceT 将满足 ranges :: Invocable < const DistanceT, Args... > 。否则, DistanceT 的函数调用运算符均不参与重载决议。

在每个定义了 ranges::distance 的翻译单元中,它都指向同一个定制点对象实例。(这意味着它可以自由用于内联函数和函数模板等场景,而不会违反 单一定义规则 。)

返回值

first last 的距离,或范围 r 的起点到终点的距离。

示例

参见

返回两个迭代器之间的距离
(函数模板)
按给定距离推进迭代器
(函数模板)
递增迭代器
(函数模板)
递减迭代器
(函数模板)
获取可在常数时间内计算大小的范围的大小
(定制点对象)