函式模板
<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 以及從其值獲得的任何迭代器、指標和引用都可能失效。

資料競爭

該函式會訪問兩個迭代器,但不會解引用任何一個(呼叫不訪問任何指向的物件)。
另請注意上面描述的對迭代器有效性的影響。

異常安全

如果對迭代器執行的任何算術運算丟擲異常,則該函式會丟擲異常,提供與這些運算相同的保證級別。

另見