##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::advance

From cppreference.com
< cpp‎ | iterator

Defined in header `<iterator>` |  |
template< class InputIt, class Distance > void advance( InputIt& it, Distance n ); |  | (until C++17)
template< class InputIt, class Distance > constexpr void advance( InputIt& it, Distance n ); |  | (since C++17)

Increments given iterator `it` by `n` elements.

If `n` is negative, the iterator is decremented. In this case, `InputIt` must meet the requirements of `BidirectionalIterator`, otherwise the behavior is undefined.

### [edit] Parameters

it | - | iterator to be advanced
n | - | number of elements `it` should be advanced
Type requirements
- `InputIt` must meet the requirements of `InputIterator`.

### [edit] Return value

(none)

### [edit] Complexity

Linear.

However, if `InputIt` additionally meets the requirements of `RandomAccessIterator`, complexity is constant.

### [edit] Notes

The behavior is undefined if the specified sequence of increments or decrements would require that a non-incrementable iterator (such as the past-the-end iterator) is incremented, or that a non-decrementable iterator (such as the front iterator or the singular iterator) is decremented.

### [edit] Example

Run this code

    #include <iostream>
    #include <iterator>
    #include <vector>

    int main()
    {
        std::vector<int> v{ 3, 1, 4 };

        auto vi = v.begin();

        std::advance(vi, 2);

        std::cout << *vi << '\n';
    }

Output:

    4

### [edit] See also

next (C++11) | increment an iterator (function) [edit]
distance | returns the distance between two iterators (function) [edit]

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/iterator/advance&oldid=86735"