funciones fill() y fill_n() en C++ STL

Un vector, una vez declarado, tiene todos sus valores inicializados a cero. A continuación se muestra un código de ejemplo para demostrar lo mismo. 

CPP

// C++ program for displaying the default initialization
// of the vector vect[]
#include<bits/stdc++.h>
using namespace std;
 
int main()
{
    // Creating a vector of size 8
    vector<int> vect(8); 
 
    // Printing default values
    for (int i=0; i<vect.size(); i++)
       cout << ' ' << vect[i];
}

Producción :

0 0 0 0 0 0 0 0

  ¿Qué pasa si deseamos inicializar el vector a un valor específico, digamos 1? Para esto, podemos pasar el valor junto con el tamaño del vector. 

CPP

// C++ program for displaying specified initialization
// of the vector vect[]
#include<bits/stdc++.h>
using namespace std;
 
int main ()
{
    // Creates a vector of size 8 with all initial
    // values as 1.
    vector<int> vect(8, 1); 
 
    for (int i=0; i<vect.size(); i++)
       cout << ' ' << vect[i];
}

Producción :

1 1 1 1 1 1 1 1

  ¿Qué sucede si deseamos inicializar los primeros 4 valores para decir 100 y el resto de 6 valores como 200? Una forma de hacerlo es proporcionar manualmente un valor a cada posición en el vector. Los otros métodos proporcionados en STL, la biblioteca de plantillas estándar, son fill y fill_n.  

  • fill() La función ‘fill’ asigna el valor ‘val’ a todos los elementos en el rango [begin, end), donde ‘begin’ es la posición inicial y ‘end’ es la última posición. NOTA: Tenga en cuenta que ‘comienzo’ está incluido en el rango pero ‘fin’ NO está incluido. A continuación se muestra un ejemplo para demostrar ‘relleno’: 

CPP

// C++ program to demonstrate working of fill()
#include <bits/stdc++.h>
using namespace std;
 
int main ()
{
  vector<int> vect(8);
 
  // calling fill to initialize values in the
  // range to 4
  fill(vect.begin() + 2, vect.end() - 1, 4);
 
  for (int i=0; i<vect.size(); i++)
    cout << vect[i] << " ";
 
  return 0;
}
  • Producción : 
0 0 4 4 4 4 4 0
  • fill_n() En fill_n(), especificamos la posición de inicio, el número de elementos a rellenar y los valores a rellenar. El siguiente código demuestra el uso de fill_n. 

CPP

// C++ program to demonstrate working of fil_n()
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    vector<int> vect(8); 
 
    // calling fill to initialize first four values
    // to 7
    fill_n(vect.begin(), 4, 7);
 
    for (int i=0; i<vect.size(); i++)
        cout << ' ' << vect[i];
    cout << '\n';
 
    // calling fill to initialize 3 elements from
    // "begin()+3" with value 4
    fill_n(vect.begin() + 3, 3, 4);
 
    for (int i=0; i<vect.size(); i++)
        cout << ' ' << vect[i];
    cout << '\n';
 
    return 0;
}
  • Producción :
 7 7 7 7 0 0 0 0
 7 7 7 4 4 4 0 0

  Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Veamos la tabla de diferencias en forma tabular:

  llenar()  llenar_n()
1. Establece el valor dado a todos los elementos de la array. Se utiliza para asignar un nuevo valor a un número específico de elementos en un rango que comienza con un elemento en particular.
2.

Su sintaxis es -:

void fill(const value_type &val);

Su sintaxis es -:

void fill_n (OutputIterator first, Size n, const T& val);

3. No tiene valor de retorno. Devuelve un iterador que apunta al elemento que sigue al último elemento a rellenar.
4. Su complejidad temporal es O(N) Su complejidad temporal es O(N)

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 *