< cpp‎ | iterator
Defined in header <iterator>
template< class ForwardIt >

ForwardIt next(
  ForwardIt it,

  typename std::iterator_traits<ForwardIt>::difference_type n = 1 );
(since C++11)
(until C++17)
template< class InputIt >

constexpr InputIt next(
  InputIt it,

  typename std::iterator_traits<InputIt>::difference_type n = 1 );
(since C++17)

Return the nth successor of iterator it.


it - an iterator
n - number of elements to advance
Type requirements
ForwardIt must meet the requirements of ForwardIterator.
InputIt must meet the requirements of InputIterator.

Return value

The nth successor of iterator it.

Possible implementation

template<class ForwardIt>
ForwardIt next(ForwardIt it,
               typename std::iterator_traits<ForwardIt>::difference_type n = 1)
    std::advance(it, n);
    return it;


Although the expression ++c.begin() often compiles, it is not guaranteed to do so: c.begin() is an rvalue expression, and there is no BidirectionalIterator requirement that specifies that increment of an rvalue is guaranteed to work. In particular, when iterators are implemented as pointers, ++c.begin() does not compile, while std::next(c.begin()) does.


#include <iostream>
#include <iterator>
#include <vector>
int main() 
    std::vector<int> v{ 3, 1, 4 };
    auto it = v.begin();
    auto nx = std::next(it, 2);
    std::cout << *it << ' ' << *nx << '\n';


3 4

See also

decrement an iterator
advances an iterator by given distance