Namespaces
Variants

std::experimental::ranges:: distance

From cppreference.net
Определено в заголовке <experimental/ranges/iterator>
namespace {

constexpr /* unspecified */ distance = /* unspecified */ ;

}
(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 .

Пример

Смотрите также

возвращает расстояние между двумя итераторами
(шаблон функции)
перемещает итератор на заданное расстояние
(шаблон функции)
инкрементирует итератор
(шаблон функции)
декрементирует итератор
(шаблон функции)
получает размер диапазона, который может быть вычислен за константное время
(объект точки настройки)