名前空間
変種
操作

std::distance

提供: cppreference.com
< cpp‎ | iterator
 
 
イテレータライブラリ
イテレータコンセプト
イテレータプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
ユーティリティ
イテレータアダプタ
ストリームイテレータ
イテレータのカスタマイゼーションポイント
イテレータ操作
distance
(C++11)
(C++11)
範囲アクセス
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
ヘッダ <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未満)

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

(C++11以上)

目次

[編集] 引数

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

[編集] 戻り値

first から last まで行くために必要なインクリメント回数。 ランダムアクセスイテレータが使用され、 firstlast から到達可能であれば、値は負になることがあります。 (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';
               //the behavior is undefined (until C++11)
}

出力:

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

[編集] 関連項目

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