Front Page / Iterators / Iterator Metafunctions / distance

# distance

### Synopsis

    template<
          typename First
        , typename Last
        >
    struct distance
    {
        typedef unspecified type;
    };

### Description

Returns the distance between `First` and `Last` iterators, that is, an Integral Constant `n` such that `advance<First,n>::type` is identical to `Last`.

### Header

    #include <boost/mpl/distance.hpp>

### Parameters

Parameter | Requirement | Description
--- | --- | ---
`First`, `Last` | Forward Iterator | Iterators to compute a distance between.

### Model Of

Tag Dispatched Metafunction

### Expression semantics

For any Forward Iterators `first` and `last`:

    typedef distance<first,last>::type n;

Return type: | Integral Constant.
Precondition: | [`first`, `last`) is a valid range.

Semantics:

Equivalent to

    typedef iter_fold<
          iterator_range<first,last>
        , long_<0>
        , next<_1>
        >::type n;

Postcondition: | `is_same< advance<first,n>::type, last >::value == true`.

### Complexity

Amortized constant time if `first` and `last` are Random Access Iterators, otherwise linear time.

### Example

    typedef range_c<int,0,10>::type range;
    typedef begin<range>::type first;
    typedef end<range>::type last;

    BOOST_MPL_ASSERT_RELATION( (distance<first,last>::value), ==, 10);

### See also

Iterators, Tag Dispatched Metafunction, `advance`, `next`, `prior`