名前空間
変種
操作

std::distance

提供: cppreference.com
< cpp‎ | iterator
ヘッダ <iterator> で定義
template< class InputIt >

typename std::iterator_traits<InputIt>::difference_type

    distance( InputIt first, InputIt last );
(C++17以前)
template< class InputIt >

constexpr typename std::iterator_traits<InputIt>::difference_type

    distance( InputIt first, InputIt last );
(C++17およびそれ以降)

first から last までのホップ数を返します。

lastfirst を (繰り返し) インクリメントすることによって first から到達できなければ、動作は未定義です。

(C++11以前)

InputItRandomAccessIterator でない場合、 lastfirst を (繰り返し) インクリメントすることによって first から到達できなければ、動作は未定義です。 InputItRandomAccessIterator の場合、 lastfirst から到達可能でなく firstlast から到達可能でなければ、動作は未定義です。

(C++11およびそれ以降)

目次

[編集] 引数

first - 最初の要素を指すイテレータ
last - 範囲の終端を指すイテレータ
型の要件
-
InputItInputIterator の要件を満たさなければなりません。 InputIt がさらに RandomAccessIterator の要件も満たす場合、操作はより効率的になります。

[編集] 戻り値

first から last まで行くために必要なインクリメント回数。 ランダムアクセスイテレータが使用され、 firstlast から到達可能であれば、値は負になることがあります。 (C++11およびそれ以降)

[編集] 計算量

線形。

ただし、 InputIt がさらに RandomAccessIterator の要件も満たす場合、計算量は定数時間になります。

[編集]

#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';
               //the behavior is undefined (until C++11)
}

出力:

distance(first, last) = 3
distance(last, first) = -3

[編集] 関連項目

イテレータを指定された距離だけ前進させます
(関数) [edit]
一定の基準を満たす要素の数を返します
(関数テンプレート) [edit]