STL generate

Si usted tiene una función que genera números/valores/instancias (ej: un generador de números aleatorios, o identificadores) puede usar el algoritmo generate de la STL para crear una secuencia de objetos. Por ejemplo, para generar 100 números (pseudo)aleatorios de 0 a 1:
#include <algorithm>
#include <vector>

double uniform_random()
{
return (rand() % 10001) / 10000.0;
}

int main()
{
std::vector<double> v(100);
std::generate(v.begin(), v.end(), uniform_random);
return 0;
}
El algoritmo generate recibe dos iteradores (inicio y fin), y llama a la función especificada para cada una de las posiciones que recorre:
template<typename ForwardIterator, typename Generator>
void generate(ForwardIterator first, ForwardIterator last,
Generator gen)
{
for (; first != last; ++first)
*first = gen();
}
Los algoritmos de la STL son genéricos porque utilizan la aritmética de punteros. Los iteradores sobrecargan los operadores para poder ser utilizados como punteros. Así un algoritmo puede ser utilizado con los contenedores de la STL (vector) o con los viejos y tan queridos arreglos (y punteros) de C:
#include <algorithm>

double uniform_random()
{
return (rand() % 10001) / 10000.0;
}

int main()
{
double v[100];
std::generate(v, v+100, uniform_random);
return 0;
}

 08 December 2008 | cpp programacion algoritmo stl