Lista de reenvío en C++ | Juego 1 (Introducción y funciones importantes)

La lista de reenvío en STL implementa una lista enlazada individualmente. Introducidas desde C++ 11, las listas de reenvío son más útiles que otros contenedores en las operaciones de inserción, eliminación y movimiento (como ordenar) y permiten la inserción y eliminación constante de elementos en el tiempo. 
Se diferencia de la lista por el hecho de que la lista de reenvío realiza un seguimiento de la ubicación solo del siguiente elemento, mientras que la lista realiza un seguimiento de los elementos anterior y siguiente, lo que aumenta el espacio de almacenamiento necesario para almacenar cada elemento. El inconveniente de una lista hacia adelante es que no se puede iterar hacia atrás y no se puede acceder directamente a sus elementos individuales. 
La lista de reenvío se prefiere a la lista cuando solo se requiere un recorrido hacia adelante (igual que se prefiere la lista de enlace simple a la lista de enlace doble) ya que podemos ahorrar espacio. Algunos casos de ejemplo son, enstringmiento en hashing, representación de la lista de adyacencia del gráfico, etc.
Operaciones en la lista de avance:
 
1. asignar() : esta función se usa para asignar valores a la lista de avance, su otra variante se usa para asignar elementos repetidos y usando los valores de otra lista.

CPP

// C++ code to demonstrate forward list
// and assign()
#include <forward_list>
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    // Declaring forward list
    forward_list<int> flist1;
 
    // Declaring another forward list
    forward_list<int> flist2;
   
    //Declaring another forward list
      forward_list<int> flist3;
 
    // Assigning values using assign()
    flist1.assign({ 1, 2, 3 });
 
    // Assigning repeating values using assign()
    // 5 elements with value 10
    flist2.assign(5, 10);
   
   
      //Assigning values of list 1 to list 3
      flist3.assign(flist1.begin(), flist1.end());
 
    // Displaying forward lists
    cout << "The elements of first forward list are : ";
    for (int& a : flist1)
        cout << a << " ";
    cout << endl;
 
    cout << "The elements of second forward list are : ";
    for (int& b : flist2)
        cout << b << " ";
    cout << endl;
   
       
      cout << "The elements of third forward list are : ";
    for (int& c : flist3)
        cout << c << " ";
    cout << endl;
 
    return 0;
}
Producción

The elements of first forward list are : 1 2 3 
The elements of second forward list are : 10 10 10 10 10 
The elements of third forward list are : 1 2 3 

2. push_front() : esta función se usa para insertar el elemento en la primera posición en la lista de avance. El valor de esta función se copia en el espacio antes del primer elemento en el contenedor. El tamaño de la lista de reenvío aumenta en 1.
3. emplace_front() : esta función es similar a la función anterior pero en esta no se produce ninguna operación de copia, el elemento se crea directamente en la memoria antes del primer elemento de la lista de reenvío.
4. pop_front() : esta función se utiliza para eliminar el primer elemento de la lista.  

CPP

// C++ code to demonstrate working of
// push_front(), emplace_front() and pop_front()
#include <forward_list>
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    // Initializing forward list
    forward_list<int> flist = { 10, 20, 30, 40, 50 };
 
    // Inserting value using push_front()
    // Inserts 60 at front
    flist.push_front(60);
 
    // Displaying the forward list
    cout
        << "The forward list after push_front operation : ";
    for (int& c : flist)
        cout << c << " ";
    cout << endl;
 
    // Inserting value using emplace_front()
    // Inserts 70 at front
    flist.emplace_front(70);
 
    // Displaying the forward list
    cout << "The forward list after emplace_front "
            "operation : ";
    for (int& c : flist)
        cout << c << " ";
    cout << endl;
 
    // Deleting first value using pop_front()
    // Pops 70
    flist.pop_front();
 
    // Displaying the forward list
    cout << "The forward list after pop_front operation : ";
    for (int& c : flist)
        cout << c << " ";
    cout << endl;
 
    return 0;
}
Producción

The forward list after push_front operation : 60 10 20 30 40 50 
The forward list after emplace_front operation : 70 60 10 20 30 40 50 
The forward list after pop_front operation : 60 10 20 30 40 50 

5. insert_after() : esta función nos da la opción de insertar elementos en cualquier posición en la lista de avance. Los argumentos de esta función se copian en la posición deseada.
6. emplace_after(): esta función también realiza la misma operación que la función anterior, pero los elementos se crean directamente sin ninguna operación de copia.
7. erase_after(): Esta función se usa para borrar elementos de una posición particular en la lista de reenvío. Hay dos variantes de la función ‘borrar después’.

CPP

// C++ code to demonstrate working of
// insert_after(), emplace_after()
// and erase_after()
#include <forward_list>
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    // Initializing forward list
    forward_list<int> flist = { 10, 20, 30 };
 
    // Declaring a forward list iterator
    forward_list<int>::iterator ptr;
 
    // Inserting value using insert_after()
    // starts insertion from second position
    ptr = flist.insert_after(flist.begin(), { 1, 2, 3 });
 
    // Displaying the forward list
    cout << "The forward list after insert_after operation "
            ": ";
    for (int& c : flist)
        cout << c << " ";
    cout << endl;
 
    // Inserting value using emplace_after()
    // inserts 2 after ptr
    ptr = flist.emplace_after(ptr, 2);
 
    // Displaying the forward list
    cout << "The forward list after emplace_after "
            "operation : ";
    for (int& c : flist)
        cout << c << " ";
    cout << endl;
 
    // Deleting value using erase.after Deleted 2
    // after ptr
    ptr = flist.erase_after(ptr);
      cout << "The forward list after erase_after operation "
            ": ";
      // Displaying the forward list
      for (int& c : flist)
        cout << c << " ";
    cout << endl;
   
   
   
      // Deleting value in a range
      // another varient of erase which uses start and end iterator
      // and deletes all the values in between them
      ptr=flist.erase_after(flist.begin(), flist.end());
    cout << "The forward list after erase_after (range) operation "
            ": ";
      // Displaying the forward list
      for (int& c : flist)
        cout << c << " ";
    cout << endl; 
 
    return 0;
}
Producción

The forward list after insert_after operation : 10 1 2 3 20 30 
The forward list after emplace_after operation : 10 1 2 3 2 20 30 
The forward list after erase_after operation : 10 1 2 3 2 30 
The forward list after erase_after (range) operation : 10 

8. remove() : Esta función elimina el elemento particular de la lista de reenvío mencionada en su argumento.
9. remove_if() : Esta función elimina según la condición en su argumento. 

CPP

// C++ code to demonstrate
// working of remove() and
// remove_if()
#include <forward_list>
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    // Initializing forward list
    forward_list<int> flist = { 10, 20, 30, 25, 40, 40 };
 
    // Removing element using remove()
    // Removes all occurrences of 40
    flist.remove(40);
 
    // Displaying the forward list
    cout << "The forward list after remove operation : ";
    for (int& c : flist)
        cout << c << " ";
    cout << endl;
 
    // Removing according to condition. Removes
    // elements greater than 20. Removes 25 and 30
    flist.remove_if([](int x) { return x > 20; });
 
    // Displaying the forward list
    cout << "The forward list after remove_if operation : ";
    for (int& c : flist)
        cout << c << " ";
    cout << endl;
 
    return 0;
}
Producción

The forward list after remove operation : 10 20 30 25 
The forward list after remove_if operation : 10 20 

10. clear() : Esta función borra todos los elementos de la lista. 

C++

#include <forward_list>  // for using forword list
#include <iostream>
using namespace std;
  
int main()
{
      // creating forward list
    forward_list<int> flist{ 1, 2, 3, 4, 5 }; 
      
   
      //Printing forward list
      cout<<"Forward list: ";
      for(auto i: flist){
      cout<<i<<" ";
    }
      cout<<endl;
   
   
   
    flist.clear();
    // Forward List becomes empty
  
   
   
    // Printing the Forward list
      cout<<"Forward list after using clear function: ";
    for (auto it = flist.begin(); it != flist.end(); ++it)
        cout << ' ' << *it;
      cout<<endl;
   
   
    return 0;
}
Producción

Forward list: 1 2 3 4 5 
Forward list after using clear function: 

11. splice_after() : esta función transfiere elementos de una lista hacia adelante a otra.  

CPP

// C++ code to demonstrate working of
// splice_after()
#include <forward_list> // for splice_after()
#include <iostream>
using namespace std;
 
// Driver Code
int main()
{
    // Initializing forward list
    forward_list<int> flist1 = { 10, 20, 30 };
 
    // Initializing second list
    forward_list<int> flist2 = { 40, 50, 60 };
 
    // Shifting elements from first to second
    // forward list after 1st position
    flist2.splice_after(flist2.begin(), flist1);
 
    // Displaying the forward list
    cout << "The forward list after splice_after operation "
            ": ";
    for (int& c : flist2)
        cout << c << " ";
    cout << endl;
 
    return 0;
}
Producción

The forward list after splice_after operation : 40 10 20 30 50 60 

Algunos métodos más de forward_list:

Método

Definición

frente() Esta función se utiliza para hacer referencia al primer elemento del contenedor de la lista de reenvío.
empezar() Esta función se utiliza para devolver un iterador que apunta al primer elemento del contenedor de la lista de reenvío.
final() Esta función se usa para devolver un iterador que apunta al último elemento del contenedor de la lista.
cbegin() Devuelve un iterador constante que apunta al primer elemento de forward_list.
ascender() Devuelve un iterador constante que apunta al último elemento pasado de la lista_delantera.
antes_de_comenzar() Devuelve un iterador que apunta a la posición anterior al primer elemento de forward_list.
cbefore_begin() Devuelve un iterador de acceso aleatorio constante que apunta a la posición anterior al primer elemento de forward_list.
tamaño máximo() Devuelve el número máximo de elementos que puede contener forward_list.
redimensionar() Cambia el tamaño de forward_list.
único() Elimina todos los elementos duplicados consecutivos de forward_list. Utiliza un predicado binario para la comparación.
reverso()  Invierte el orden de los elementos presentes en forward_list.

Para el segundo conjunto, consulte este artículo – Lista de reenvío en C++ | Conjunto 2 (Funciones de manipulación)
Este artículo es una contribución de Manjeet Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *