Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
Front Page / Iterators / Iterator Metafunctions / advance



      typename Iterator
    , typename N
struct advance
    typedef unspecified type;


Moves Iterator by the distance N. For bidirectional and random access iterators, the distance may be negative.


#include <boost/mpl/advance.hpp>


Parameter Requirement Description
Iterator Forward Iterator An iterator to advance.
N Integral Constant A distance.

Model Of

Tag Dispatched Metafunction

Expression semantics

For a Forward Iterator iter and arbitrary Integral Constant n:

typedef advance<iter,n>::type j; 
Return type:Forward Iterator.
Precondition:If Iterator is a Forward Iterator, n::value must be nonnegative.

Equivalent to:

typedef iter i0; 
typedef next<i0>::type i1; 
typedef next<in-1>::type j;

if n::value > 0, and

typedef iter i0; 
typedef prior<i0>::type i1; 
typedef prior<in-1>::type j;


Postcondition:j is dereferenceable or past-the-end; distance<iter,j>::value == n::value if n::value > 0, and distance<j,iter>::value == n::value otherwise.


Amortized constant time if iter is a model of Random Access Iterator, otherwise linear time.


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

typedef advance<first,int_<10> >::type i1;
typedef advance<last,int_<-10> >::type i2;

BOOST_MPL_ASSERT(( boost::is_same<i1,last> ));
BOOST_MPL_ASSERT(( boost::is_same<i2,first> ));

See also

Iterators, Tag Dispatched Metafunction, distance, next