Espacios de nombres
Variantes
Acciones

std::next

De cppreference.com
< cpp‎ | iterator
 
 
Biblioteca de iteradores
Conceptos de iteradores
Primitivas de iteradores
Conceptos de algoritmos y servicios
Conceptos invocables indirectos
Requerimientos comunes de algoritmos
Servicios
Adaptadores de iteradores
Iteradores de flujos
Puntos de personalización de iteradores
Operaciones de iteradores
(C++11)
next
(C++11)
Acceso a rangos
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
Definido en el archivo de encabezado <iterator>
template< class InputIt >
InputIt next( InputIt it, typename std::iterator_traits<InputIt>::difference_type n = 1 );
(desde C++11)
(hasta C++17)
template< class InputIt >

constexpr

InputIt next( InputIt it, typename std::iterator_traits<InputIt>::difference_type n = 1 );
(desde C++17)

Devuelve el nésimo sucesor (o -nésimo predecesor si n es negativo) del iterador it.

Contenido

[editar] Parámetros

it - Un iterador.
n - Número de elementos a avanzar.
Requisitos de tipo
-
InputIt debe satisfacer los requisitos de InputIterator.

[editar] Valor de retorno

Un iterador de tipo InputIt que contiene el nésimo sucesor (o -nésimo predecesor si n es negativo) del iterador it.

[editar] Complejidad

Lineal.

Sin embargo, si InputIt cumple además los requisitos de RandomAccessIterator, la complejidad es constante.

[editar] Posible implementación

template<class InputIt>
constexpr // desde C++17
InputIt next(InputIt it, typename std::iterator_traits<InputIt>::difference_type n = 1)
{
    std::advance(it, n);
    return it;
}

[editar] Notas

Aunque la expresión ++c.begin() suele compilarse, no se garantiza que lo haga: c.begin() es una expresión r-valor y no hay ningún requisito de InputIterator que especifique que se garantiza que el incremento de un r-valor funcione. En particular, cuando los iteradores se implementan como punteros o su operator++ está calificado como referencia a l-valor, ++c.begin() no compila, mientras que std::next(c.begin()) sí.

[editar] Ejemplo

#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';
}

Salida:

4 6
 5

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2353 C++11 next requería ForwardIterator Se admite InputIterator.

[editar] Véase también

(C++11)
Decrementa un iterador.
(función) [editar]
Avanza un iterador en una distancia determinada.
(función) [editar]
Devuelve la distancia entre dos iteradores.
(función) [editar]
Incrementa un iterador en una distancia dada o a un límite.
(niebloid) [editar]