GeezerVison is showing cpprefjp.github.io — std::distance - cpprefjp C++日本語リファレンス
最終更新日時:
2026年08月25日 12時11分17秒 (JST)
Akira Takahashi
が更新
履歴
編集
function template
<iterator>
std:: distance
namespace std {
template < class InputIterator >
typename iterator_traits < InputIterator >:: difference_type
distance ( InputIterator first , InputIterator last ); // C++98
template < class InputIterator >
constexpr typename iterator_traits < InputIterator >:: difference_type
distance ( InputIterator first , InputIterator last ); // C++17
}
概要
イテレータ間の距離を求める。
この関数は、以下のような状況で活用できる:
要件
InputIteratorがランダムアクセスイテレータの場合、firstはlastに到達可能、もしくはlastからfirstに到達可能であること。
それ以外のイテレータの場合には、firstからlastに到達可能であること。
効果
InputIteratorがランダムアクセスイテレータの場合は、last - firstが返る。
それ以外のイテレータの場合は、firstからlastまでイテレータをインクリメントしていき、距離をカウントする。
戻り値
firstからlastまでの距離
計算量
InputIteratorがランダムアクセスイテレータの場合はO(1)。それ以外のイテレータの場合はO(n)。
例
出力
3
5
実装例
template < class InputIterator >
typename std::iterator_traits < InputIterator >:: difference_type
distance_impl ( InputIterator first , InputIterator last ,
std::input_iterator_tag )
{
using result_type = typename std::iterator_traits < InputIterator >:: difference_type ;
result_type n = 0 ;
for (; first != last ; ++ first ) {
++ n ;
}
return n ;
}
template < class RandomAccessIterator >
typename std::iterator_traits < RandomAccessIterator >:: difference_type
distance_impl ( RandomAccessIterator first , RandomAccessIterator last ,
std::random_access_iterator_tag )
{
return last - first ;
}
template < class InputIterator >
typename std::iterator_traits < InputIterator >:: difference_type
distance ( InputIterator first , InputIterator last )
{
return distance_impl ( first , last ,
typename std::iterator_traits < InputIterator >:: iterator_category ());
}
参照