| | |
template<class InputIt> InputIt next( InputIt it,typenamestd::iterator_traits<InputIt>::difference_type n=1); | | (since C++11) (until C++17) |
template<class InputIt>
constexpr
InputIt next( InputIt it,typenamestd::iterator_traits<InputIt>::difference_type n=1); | | (since C++17) |
| | |
Return thenth successor (or-nth predecessor ifn is negative) of iteratorit.
[edit]Parameters
it | - | an iterator |
n | - | number of elements to advance |
Type requirements |
-InputIt must meet the requirements ofLegacyInputIterator. |
[edit]Return value
An iterator of typeInputIt
that holds thenth successor (or-nth predecessor ifn is negative) of iteratorit.
[edit]Complexity
Linear.
However, ifInputIt
additionally meets the requirements ofLegacyRandomAccessIterator, complexity is constant.
[edit]Possible implementation
template<class InputIt>constexpr// since C++17InputIt next(InputIt it,typenamestd::iterator_traits<InputIt>::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 noLegacyInputIterator requirement that specifies that increment of an rvalue is guaranteed to work. In particular, when iterators are implemented as pointers or itsoperator++
is lvalue-ref-qualified,++c.begin() does not compile, whilestd::next(c.begin()) does.
[edit]Example
#include <iostream>#include <iterator>#include <vector> int main(){std::vector<int> v{4,5,6}; auto it= v.begin();auto nx= std::next(it,2);std::cout<<*it<<' '<<*nx<<'\n'; it= v.end(); nx= std::next(it,-2);std::cout<<' '<<*nx<<'\n';}
Output:
[edit]Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
[edit]See also
| decrement an iterator (function template)[edit] |
| advances an iterator by given distance (function template)[edit] |
| returns the distance between two iterators (function template)[edit] |
| increment an iterator by a given distance or to a bound (algorithm function object)[edit] |