std:: next
|
Definido en el 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
|
(desde C++17) | |
Devuelve el n ésimo sucesor (o - n ésimo predecesor si n es negativo) del iterador it .
Contenidos |
Parámetros
| it | - | un iterador |
| n | - | número de elementos a avanzar |
| Requisitos de tipo | ||
-
InputIt
debe cumplir con los requisitos de
LegacyInputIterator
.
|
||
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 adicionalmente con los requisitos de
LegacyRandomAccessIterator
, la complejidad es constante.
Implementación posible
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
(
)
a menudo compila, no está garantizado que lo haga:
c.
begin
(
)
es una expresión rvalue, y no existe un
LegacyInputIterator
requisito que especifique que el incremento de un rvalue esté garantizado para funcionar. En particular, cuando los iteradores se implementan como punteros o su
operator++
está calificado como referencia a lvalue,
++
c.
begin
(
)
no compila, mientras que
std
::
next
(
c.
begin
(
)
)
sí lo hace.
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 que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Se aplica a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2353 | C++11 |
next
requería
LegacyForwardIterator
|
LegacyInputIterator permitido |
Véase también
|
(C++11)
|
decrementa un iterador
(plantilla de función) |
|
avanza un iterador una distancia dada
(plantilla de función) |
|
|
devuelve la distancia entre dos iteradores
(plantilla de función) |
|
|
(C++20)
|
incrementa un iterador una distancia dada o hasta un límite
(objeto función de algoritmo) |