generate_n

Asigna los valores generados por un objeto de función a un número especificado de elementos de un intervalo y vuelve a la posición situada una más allá del último valor asignado.

template<class OutputIterator, class Diff, class Generator> void generate_n( OutputIterator First, Diff Count, Generator Gen);

Parámetros

  • First
    Iterador de salida que direcciona la posición del primer elemento del intervalo al que se van a asignar valores.

  • Count
    Tipo de entero con signo o sin signo que especifica el número de elementos a los que la función de generador va a asignar un valor.

  • Gen
    Objeto de función al que se llama sin argumentos que se usa para generar los valores que se van a asignar a cada uno de los elementos del intervalo.

Comentarios

El objeto de función se invoca por cada elemento en el intervalo y no es necesario que el valor devuelto sea el mismo cada vez que se llama. Así, por ejemplo, puede leer de un archivo o hacer referencia a un estado local y modificarlo. El tipo de resultado del generador debe poder convertirse en el tipo de valor de los iteradores hacia delante del intervalo.

El intervalo al que se hace referencia debe ser válido; todos los punteros se deben poder desreferenciar y, dentro de la secuencia, se debe poder llegar a la última posición desde la primera mediante incrementos.

La complejidad es lineal, siendo necesarias exactamente Count llamadas al generador.

Ejemplo

// cl.exe /EHsc /nologo /W4 /MTd
#include <vector>
#include <deque>
#include <iostream>
#include <string>
#include <algorithm>
#include <random>

using namespace std;

template <typename C> void print(const string& s, const C& c) {
    cout << s;

    for (const auto& e : c) {
        cout << e << " ";
    }

    cout << endl;
}

int main()
{
    const int elemcount = 5;
    vector<int> v(elemcount);
    deque<int> dq(elemcount);

    // Set up random number distribution
    random_device rd;
    mt19937 engine(rd());
    uniform_int_distribution<int> dist(-9, 9);

    // Call generate_n, using a lambda for the third parameter
    generate_n(v.begin(), elemcount, [&](){ return dist(engine); });
    print("vector v is: ", v);

    generate_n(dq.begin(), elemcount, [&](){ return dist(engine); });
    print("deque dq is: ", dq);
}

Salida

vector v is: 1 -9 -3 2 -9
deque dq is: -9 7 -2 4 8

Requisitos

Encabezado: <algorithm>

Espacio de nombres: std

Vea también

Referencia

generate_n (Ejemplos de STL)

Biblioteca de plantillas estándar