std::next devuelve un iterador que apunta al elemento después de haber sido avanzado por cierto no. de puestos Se define dentro del archivo de cabecera.
No modifica sus argumentos y devuelve una copia del argumento adelantado por la cantidad especificada. Si es un iterador de acceso aleatorio , la función usa solo una vez el operador + o el operador – para avanzar. De lo contrario, la función usa repetidamente el operador de aumento o disminución (operador ++ u operador –) en el iterador copiado hasta que se hayan avanzado n elementos.
Sintaxis:
ForwardIterator next (ForwardIterator it, typename iterator_traits::difference_type n = 1); it: Iterator to the base position. difference_type: It is the numerical type that represents distances between iterators of the ForwardIterator type. n: Total no. of positions by which the iterator has to be advanced. In the syntax, n is assigned a default value 1 so it will atleast advance by 1 position. Returns: It returns an iterator to the element n positions away from it.
// C++ program to demonstrate std::next #include <iostream> #include <iterator> #include <deque> #include <algorithm> using namespace std; int main() { // Declaring first container deque<int> v1 = { 1, 2, 3, 4, 5, 6, 7 }; // Declaring another container deque<int> v2 = { 8, 9, 10 }; // Declaring an iterator deque<int>::iterator i1; // i1 points to 1 i1 = v1.begin(); // Declaring another iterator to store return // value and using std::next deque<int>::iterator i2; i2 = std::next(i1, 4); // Using std::copy std::copy(i1, i2, std::back_inserter(v2)); // Remember, i1 stills points to 1 // and i2 points to 5 // v2 now contains 8 9 10 1 2 3 4 // Displaying v1 and v2 cout << "v1 = "; int i; for (i = 0; i < 7; ++i) { cout << v1[i] << " "; } cout << "\nv2 = "; for (i = 0; i < 7; ++i) { cout << v2[i] << " "; } return 0; }
Producción:
v1 = 1 2 3 4 5 6 7 v2 = 8 9 10 1 2 3 4
¿Cómo puede ser útil?
- Iterador avanzado en listas: dado que las listas admiten iteradores bidireccionales , que solo se pueden incrementar mediante el uso de los operadores ++ y –. Entonces, si queremos avanzar el iterador en más de una posición, usar std::next puede ser extremadamente útil.
// C++ program to demonstrate std::next
#include <iostream>
#include <iterator>
#include <list>
#include <algorithm>
using
namespace
std;
int
main()
{
// Declaring first container
list<
int
> v1 = { 1, 2, 3, 7, 8, 9 };
// Declaring second container
list<
int
> v2 = { 4, 5, 6 };
list<
int
>::iterator i1;
i1 = v1.begin();
// i1 points to 1 in v1
list<
int
>::iterator i2;
// i2 = v1.begin() + 3;
// This cannot be used with lists
// so use std::next for this
i2 = std::next(i1, 3);
// Using std::copy
std::copy(i1, i2, std::back_inserter(v2));
// v2 now contains 4 5 6 1 2 3
// Displaying v1 and v2
cout <<
"v1 = "
;
int
i;
for
(i1 = v1.begin(); i1 != v1.end(); ++i1) {
cout << *i1 <<
" "
;
}
cout <<
"\nv2 = "
;
for
(i1 = v2.begin(); i1 != v2.end(); ++i1) {
cout << *i1 <<
" "
;
}
return
0;
}
Producción:
v1 = 1 2 3 7 8 9 v2 = 4 5 6 1 2 3
Explicación: aquí, solo mire cómo si queremos copiar solo una parte seleccionada de la lista, entonces podemos usar std::next, ya que de lo contrario no podemos usar ningún operador +=, -= con iteradores bidireccionales admitidos por listas. Entonces, usamos std::next y directamente avanzamos el iterador tres posiciones.
Este artículo es una contribución de Mrigendra Singh . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA