std::next
Definido en el archivo de encabezado <iterator> | ||
template<class InputIt > InputIt next( InputIt it, typenamestd::iterator_traits<InputIt>::difference_type n =1); | (desde C++11) (hasta C++17) | |
template<class InputIt > constexpr | (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, typenamestd::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) |
Avanza un iterador en una distancia determinada. (función) | |
Devuelve la distancia entre dos iteradores. (función) | |
(C++20) | Incrementa un iterador en una distancia dada o a un límite. (niebloid) |