函数模板
<iterator>

std::distance

template<class InputIterator>  typename iterator_traits<InputIterator>::difference_type    distance (InputIterator first, InputIterator last);
返回迭代器之间的距离
计算 firstlast 之间的元素数量。

如果 it 是一个随机访问迭代器,该函数使用 operator- 来计算。否则,该函数使用递增运算符(operator++)进行重复计算。

参数

first
指向起始元素的迭代器。
last
指向最终元素的迭代器。此元素必须可从 first 到达。
InputIterator 至少应是一个输入迭代器

返回值

firstlast 之间的元素数量。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// advance example
#include <iostream>     // std::cout
#include <iterator>     // std::distance
#include <list>         // std::list

int main () {
  std::list<int> mylist;
  for (int i=0; i<10; i++) mylist.push_back (i*10);

  std::list<int>::iterator first = mylist.begin();
  std::list<int>::iterator last = mylist.end();

  std::cout << "The distance is: " << std::distance(first,last) << '\n';

  return 0;
}

输出

The distance is: 10


复杂度

随机访问迭代器 的常量。
否则,线性复杂度为 n

迭代器有效性

如果 InputIterator 不是至少一个前向迭代器,则 first 以及从其值获得的任何迭代器、指针和引用都可能失效。

数据竞争

该函数会访问两个迭代器,但不会解引用任何一个(调用不访问任何指向的对象)。
另请注意上面描述的对迭代器有效性的影响。

异常安全

如果对迭代器执行的任何算术运算抛出异常,则该函数会抛出异常,提供与这些运算相同的保证级别。

另见