C++ 参考手册
- C++11
 - C++14
 - C++17
 - C++20
 - C++ 编译器支持情况表
 - 独立与宿主实现
 - C++ 语言
 - C++ 关键词
 - 预处理器
 - C++ 标准库头文件
 - 具名要求
 - 功能特性测试 (C++20)
 - 工具库
 - 类型支持(基本类型、RTTI、类型特性)
 - 概念库 (C++20)
 - 错误处理
 - 动态内存管理
 - 日期和时间工具
 - 字符串库
 - 容器库
 - 迭代器库
 - std::begin, std::cbegin
 - std::end, std::cend
 - std::next
 - std::reverse_iterator
 - std::rbegin, std::crbegin
 - std::indirectly_readable
 - std::indirectly_writable
 - std::weakly_incrementable
 - std::prev
 - std::move_iterator
 - std::size, std::ssize
 - std::empty
 - std::data
 - std::insert_iterator
 - std::rend, std::crend
 - std::incrementable
 - std::input_or_output_iterator
 - std::sentinel_for
 - std::sized_sentinel_for, std::disable_sized_sentinel_for
 - std::input_iterator
 - std::output_iterator
 - std::forward_iterator
 - std::bidirectional_iterator
 - std::random_access_iterator
 - std::contiguous_iterator
 - std::iterator_traits
 - std::input_iterator_tag, std::output_iterator_tag, std::forward_iterator_tag, std::bidirectional_iterator_tag, std::random_access_iterator_tag, std::contiguous_iterator_tag
 - std::iterator
 - std::incrementable_traits
 - std::indirectly_readable_traits
 - std::iter_value_t, std::iter_reference_t, std::iter_difference_t, std::iter_rvalue_reference_t, std::iter_common_reference_t
 - std::indirect_unary_invocable, std::indirectly_regular_unary_invocable
 - std::indirect_unary_predicate
 - std::indirect_binary_predicate
 - std::indirect_equivalence_relation
 - std::indirect_strict_weak_order
 - std::indirectly_movable
 - std::indirectly_movable_storable
 - std::indirectly_copyable
 - std::indirectly_copyable_storable
 - std::indirectly_swappable
 - std::indirectly_comparable
 - std::permutable
 - std::mergeable
 - std::sortable
 - std::indirect_result_t
 - std::projected
 - std::move_sentinel
 - std::back_insert_iterator
 - std::front_insert_iterator
 - std::make_reverse_iterator
 - std::make_move_iterator
 - std::default_sentinel_t, std::default_sentinel
 - std::unreachable_sentinel_t, std::unreachable_sentinel
 - std::back_inserter
 - std::front_inserter
 - std::inserter
 - std::istream_iterator
 - std::ostream_iterator
 - std::istreambuf_iterator
 - std::ostreambuf_iterator
 - std::advance
 - std::distance
 - 注释
 - 范围库 (C++20)
 - 算法库
 - 数值库
 - 输入/输出库
 - 文件系统库
 - 本地化库
 - 正则表达式库
 - 原子操作库
 - 线程支持库
 - 实验性 C++ 特性
 - 有用的资源
 - 索引
 - std 符号索引
 - 协程支持 (C++20)
 - C++ 关键词
 
std::distance
|   定义于头文件  <iterator>
  | 
||
|   template< class InputIt > typename std::iterator_traits<InputIt>::difference_type   | 
(C++17 前) | |
|   template< class InputIt > constexpr typename std::iterator_traits<InputIt>::difference_type   | 
(C++17 起) | |
返回从 first 到 last 的路程。
| 
 若   | 
(C++11 前) | |
| 
 若   | 
(C++11 起) | |
| first | - | 指向首元素的迭代器 | 
| last | - | 指向范围尾的迭代器 | 
| 类型要求 | ||
 -InputIt 必须满足遗留输入迭代器 (LegacyInputIterator)  的要求。若 InputIt 额外满足遗留随机访问迭代器 (LegacyRandomAccessIterator) 的要求则操作更高效
 | ||
返回值
从 first 走到 last 所需的自增数。若使用随机访问迭代器且 first 可从 last 抵达,则值可能为负。 (C++11 起)
复杂度
线性。
然而,若 InputIt 额外满足遗留随机访问迭代器 (LegacyRandomAccessIterator) 的要求,则复杂度是常数。
示例
运行此代码
#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'; }
输出:
distance(first, last) = 3 distance(last, first) = -3
参阅
|   令迭代器前进给定的距离  (函数模板)  |