Files
2025-10-25 03:02:53 +03:00

2.4 KiB
Raw Permalink Blame History

[range.iter.op.distance]

24 Iterators library [iterators]

24.4 Iterator primitives [iterator.primitives]

24.4.4 Range iterator operations [range.iter.ops]

24.4.4.3 ranges::distance [range.iter.op.distance]

🔗

template<class I, [sentinel_for](iterator.concept.sentinel#concept:sentinel_for "24.3.4.7Concept sentinel_­for[iterator.concept.sentinel]")<I> S> requires (![sized_sentinel_for](iterator.concept.sizedsentinel#concept:sized_sentinel_for "24.3.4.8Concept sized_­sentinel_­for[iterator.concept.sizedsentinel]")<S, I>) constexpr iter_difference_t<I> ranges::distance(I first, S last);

1

#

Preconditions: [first, last) denotes a range.

2

#

Effects: Increments first until last is reached and returns the number of increments.

🔗

template<class I, [sized_sentinel_for](iterator.concept.sizedsentinel#concept:sized_sentinel_for "24.3.4.8Concept sized_­sentinel_­for[iterator.concept.sizedsentinel]")<decay_t<I>> S> constexpr iter_difference_t<decay_t<I>> ranges::distance(I&& first, S last);

3

#

Effects: Equivalent to:if constexpr (!is_array_v<remove_reference_t>)return last - first;elsereturn last - static_cast<decay_t>(first);

🔗

template<[range](range.range#concept:range "25.4.2Ranges[range.range]") R> constexpr range_difference_t<R> ranges::distance(R&& r);

4

#

Effects: If R models sized_range, equivalent to:return static_cast<range_difference_t>(ranges::size(r)); // [range.prim.size]

Otherwise, equivalent to:return ranges::distance(ranges::begin(r), ranges::end(r)); // [range.access]