Espacios de nombres
Variantes
Acciones

std::ranges::generate_n

De cppreference.com
< cpp‎ | algorithm‎ | ranges
 
 
Biblioteca de algoritmos
Políticas de ejecución (C++17)
Operaciones de secuencia no modificantes
(C++11)(C++11)(C++11)
(C++17)
Operaciones de secuencia modificantes
Operaciones en almacenamiento no inicializado
Operaciones de partición
Operaciones de ordenación
Operaciones de búsqueda binaria
Operaciones de conjuntos (en rangos ordenados)
Operaciones de pila
(C++11)
Operaciones mínimo/máximo
(C++11)
(C++17)
Permutaciones
Operaciones numéricas
Bibliotecas C
 
Algoritmos restringidos
Operaciones de secuencia no modificantes
Operaciones de secuencia modificantes
Operaciones en almacenamiento sin inicializar
Operaciones de partición
Operaciones de ordenamiento
Operaciones de búsqueda binaria
Operaciones de conjuntos (en rangos ordenados)
Operaciones de montículo/montón
Operaciones de mínimo/máximo
Permutaciones
 
Definido en el archivo de encabezado <algorithm>
Signatura de la llamada
template<std::input_or_output_iterator O, std::copy_constructible F >

requires std::invocable<F&>&&std::indirectly_writable<O, std::invoke_result_t<F&>>
constexpr O

    generate_n( O first, std::iter_difference_t<O> n, F gen );
(desde C++20)

Asigna el resultado de invocaciones sucesivas del objeto función gen a cada elemento del rango [firstfirst + n), si 0< n. De lo contrario no hace nada.

Las entidades similares a funciones descritas en esta página son niebloids, es decir:

En la práctica, pueden implementarse como objetos función o con extensiones de compilador especiales.

Contenido

[editar]Parámetros

first - El comienzo del rango de los elementos a modificar.
n - El número de elementos a modificar.
gen - El objeto función generador.

[editar]Valor de retorno

Un iterador más allá del último elemento asignado si 0< count, first de lo contrario.

[editar]Complejidad

Exactamente n invocaciones de gen() y asignaciones.

[editar]Posible implementación

struct generate_n_fn {template<std::input_or_output_iterator O, std::copy_constructible F> requires std::invocable<F&>&&std::indirectly_writable<O, std::invoke_result_t<F&>>constexpr O operator()(O first, std::iter_difference_t<O> n, F gen)const{for(; n-->0;*first =std::invoke(gen), ++first){}return first;}};   inlineconstexpr generate_n_fn generate_n {};

[editar]Ejemplo

#include <algorithm>#include <array>#include <iostream>#include <random>#include <string_view>   auto dado()// representa un dado{staticstd::uniform_int_distribution<int> distr {1, 6};staticstd::random_device engine;staticstd::mt19937 noise {engine()};return distr(noise);}   void print(constauto& v, std::string_view comment){for(int i : v)std::cout<< i <<' ';std::cout<<'('<< comment <<")\n";}   int main(){std::array<int, 8> v;   std::ranges::generate_n(v.begin(), v.size(), dado); print(v, "dado");   std::ranges::generate_n(v.begin(), v.size(), [n {0}] mutable {return n++;});// el mismo efecto que std::iota(v.begin(), v.end(), 0); print(v, "iota");}

Posible salida:

5 5 2 2 6 6 3 5 (dado) 0 1 2 3 4 5 6 7 (iota)

[editar]Véase también

Guarda el resultado de una función en un rango.
(niebloid)[editar]
Asigna un cierto valor a un rango de elementos.
(niebloid)[editar]
Asigna un valor a un número de elementos.
(niebloid)[editar]
Aplica una función a un rango de elementos.
(niebloid)[editar]
Asigna el resultado de las llamadas sucesivas de una función a n elementos de un rango.
(plantilla de función)[editar]
close