3rdParty/boost/1.78.0/libs/mpl/doc/src/refmanual/advance.rst
.. Iterators/Iterator Metafunctions//advance |10
.. parsed-literal::
template<
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.
.. parsed-literal::
#include <boost/mpl/advance.hpp>
+---------------+---------------------------+-----------------------------------+
| Parameter | Requirement | Description |
+===============+===========================+===================================+
| Iterator | |Forward Iterator| | An iterator to advance. |
+---------------+---------------------------+-----------------------------------+
| N | |Integral Constant| | A distance. |
+---------------+---------------------------+-----------------------------------+
|Tag Dispatched Metafunction|
For a |Forward Iterator| iter and arbitrary |Integral Constant| n:
.. parsed-literal::
typedef advance<iter,n>::type j;
:Return type: |Forward Iterator|.
:Precondition:
If Iterator is a |Forward Iterator|, n::value must be nonnegative.
:Semantics: Equivalent to:
.. parsed-literal::
typedef iter i0;
typedef next<i0>::type i1;
|...|
typedef next<i\ *n-1*\ >::type j;
if ``n::value > 0``, and
.. parsed-literal::
typedef iter i0;
typedef prior<i0>::type i1;
|...|
typedef prior<i\ *n-1*\ >::type j;
otherwise.
: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.
.. parsed-literal::
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> ));
|Iterators|, |Tag Dispatched Metafunction|, |distance|, |next|
.. |bidirectional| replace:: bidirectional_
.. bidirectional: Bidirectional Iterator
.. |random access| replace:: random access_
.. random access: Random Access Iterator
.. copyright:: Copyright 2001-2009 Aleksey Gurtovoy and David Abrahams Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)