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;
}