Cómo encontrar el tamaño de std::forward_list en C++ STL

Lista de reenvío en la biblioteca de plantillas estándar de C++ . Se encuentra en el archivo de encabezado #include<forward_list>. Se implementa como una lista de enlaces únicos . Se introdujo en C++ 11 por primera vez. Las listas de reenvío son contenedores de secuencias que permiten operaciones de inserción y borrado de tiempo constante desde cualquier lugar dentro de la secuencia. En el caso de una lista de reenvío, no se admite el acceso aleatorio rápido.

A diferencia de otras bibliotecas STL, std::forward_list no tiene ningún método size(). Por lo tanto, en este artículo, le mostraremos cómo obtener el tamaño de un std::forward_list en C++ STL.

Hay un problema al recuperar el tamaño de las listas de reenvío porque std::forward_list no tiene ninguna función de miembro std::size(). Para obtener el tamaño de las listas de reenvío, se puede usar la función std::distance() .

Acercarse:

Dado que la función std::distance() toma dos iteradores como argumentos y devuelve un número entero, se pueden pasar las funciones std::begin() y std::end() que apuntan a la dirección del primer elemento y la dirección después del último elemento.

Sintaxis: 

tamaño = distancia(forward_list.begin(), forward_list.end()); 
 

A continuación se muestra el código C++ para implementar el enfoque anterior:

C++14

// C++ program to implement
// the above approach
 
#include <forward_list>
#include <iostream>
using namespace std;
 
// Driver code
int main()
{
 
    forward_list<int> l1 = { 3, 5, 6, 9, 6 };
 
    // l.size() will throw an error, since
    // there is no size() method for
    // forward_list. So, to calculate the
    // size, we will use std::distance(iterator1,
    // iterator2), where iterator1 will be
    // l.begin() and iterator2 will be l.end()
    int size = distance(l1.begin(),
                        l1.end());
 
    cout << "Size of l1 is : " << size << endl;
 
    l1.remove(6);
 
    // It will erase all instances of 6
    // from the list
    size = distance(l1.begin(), l1.end());
 
    cout << "Size of l1, after removing all"
         << " instances of 6 is : " << size << endl;
 
    forward_list<int> l2 = { 6, 11, 0 };
 
    int size2 = distance(l2.begin(),
                         l2.end());
 
    cout << "Size of l2, before assigning"
         << " it to l1 : " << size2
         << endl;
 
    l1.splice_after(l1.begin(), l2);
 
    // It will assign l2 to l at the
    // provided iterator, making l1
    // as empty.
    size = distance(l1.begin(),
                    l1.end());
    size2 = distance(l2.begin(),
                     l2.end());
 
    cout << "Size of l1, after assigning"
         << " l2 to it : " << size << endl;
 
    cout << "Size of l2, after assigning"
         << " it to l1 : " << size2 << endl;
}
Producción: 

Size of l1 is : 5
Size of l1, after removing all instances of 6 is : 3
Size of l2, before assigning it to l1 : 3
Size of l1, after assigning l2 to it : 6
Size of l2, after assigning it to l1 : 0

 

Publicación traducida automáticamente

Artículo escrito por ashish0401 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 *