std::experimental::ranges::distance
來自 cppreference.com
< cpp | experimental | ranges
| 定義於標頭檔案 <experimental/ranges/iterator> |
||
| namespace { constexpr /* 未指定 */ distance = /* 未指定 */; |
(ranges TS) (定製點物件) |
|
| 呼叫簽名 (Call signature) |
||
| 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);。
如果標頭檔案 <experimental/ranges/range> 在例項化點之前未被包含,則例項化過載 (2,3) 可能會格式錯誤。
目錄 |
[編輯] 定製點物件
名稱 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 的起始和結束之間的距離。
[編輯] 示例
| 本節不完整 原因:無示例 |
[編輯] 參閱
| 返回兩個迭代器間的距離 (函式模板) | |
| 按給定距離前進迭代器 (函式模板) | |
| 遞增迭代器 (函式模板) | |
| 遞減迭代器 (函式模板) | |
| 獲取在常數時間內可計算大小的範圍的大小 (定製點物件) |