std:: distance
|
Определено в заголовочном файле
<iterator>
|
||
|
template
<
class
InputIt
>
typename
std::
iterator_traits
<
InputIt
>
::
difference_type
|
(constexpr начиная с C++17) | |
Возвращает количество переходов от first до last .
Если
InputIt
не является
LegacyRandomAccessIterator
, поведение не определено, если
last
не является
достижимым
из
first
.
Если
InputIt
является
LegacyRandomAccessIterator
, поведение не определено, если
first
и
last
недостижимы друг из друга.
Содержание
Параметры
Возвращаемое значениеКоличество инкрементов, необходимых для перехода от first к last .
СложностьЛинейный.
Однако, если
Возможная реализацияСмотрите также реализации в libstdc++ и libc++ .
Пример
Запустить этот код
#include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v{3, 1, 4}; std::cout << "distance(first, last) = " << std::distance(v.begin(), v.end()) << '\n' << "distance(last, first) = " << std::distance(v.end(), v.begin()) << '\n'; // поведение не определено (до LWG940) static constexpr auto il = {3, 1, 4}; // Начиная с C++17 `distance` может использоваться в контексте constexpr. static_assert(std::distance(il.begin(), il.end()) == 3); static_assert(std::distance(il.end(), il.begin()) == -3); } Вывод: distance(first, last) = 3 distance(last, first) = -3 Отчеты о дефектахСледующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
См. также
| |||||||||||||||||||||||||||||||||