std::next
| 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.
Parámetros
| it | - | Un iterador. |
| n | - | Número de elementos a avanzar. |
| Requisitos de tipo | ||
-InputIt debe satisfacer los requisitos de InputIterator.
| ||
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.
Complejidad
Lineal.
Sin embargo, si InputIt cumple además los requisitos de RandomAccessIterator, la complejidad es constante.
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;
}
|
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í.
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
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. |
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) |