Library: Algorithms
Function
Algorithm that assigns each element in a range a value produced by repeated application of the given function object
#include <algorithm>
namespace std {
  template <class ForwardIterator, class Generator>
  void generate(ForwardIterator start, ForwardIterator finish,
                Generator gen);
  template <class OutputIterator, class Size, class Generator>
  void generate_n(OutputIterator start, Size n,
                  Generator gen);
}
A value-generator function returns a value each time it is invoked. The algorithms generate() and generate_n() assign each element in the sequence [start, finish) or [start, start + n) the return value of the generator function gen(). The function gen() takes no arguments. (gen() can be a function or a class with an operator() defined that takes no arguments.)
generate_n() assumes that all iterators in the range [start, start + n] are dereferenceable, unless start is an insert iterator.
The generate() and generate_n() algorithms invoke gen() and assign its return value exactly finish - start (or n) times.
//
// generate.cpp
//
#include <algorithm>    // for generate, generate_n
#include <iostream>     // for cout, endl
#include <vector>       // for vector
// Value generator simply doubles the current value 
// and returns it.
template <class T>
class generator
{
    T val_;
public:
    generator(const T &val) : val_ (val) { }
    T operator()() {
        return val_ += val_;
    }
};
int main ()
{
    // Typedef for convenience.
    typedef std::vector<short, 
                        std::allocator<short> > vector;
    vector::value_type arr[4] = { 1, 2, 3, 4 };
    // Set up two vectors.
    vector v1(arr, arr + sizeof arr / sizeof *arr);
    vector v2 = v1;
    // Set up one empty vector.
    vector v3;
    // Create a generator function object.
    generator<vector::value_type> gen(1);
    // Generate values for all of v1.
    std::generate(v1.begin(), v1.end(), gen);
    // Generate values for first 3 of v2.
    std::generate_n(v2.begin(), 3, gen);
    // Use back_insert_iterator to generate 5 values for v3.
    std::generate_n(std::back_inserter(v3), 5, gen);
    // Copy all three to cout.
    std::ostream_iterator<vector::value_type, char,
             std::char_traits<char> > out(std::cout, " ");
    std::copy(v1.begin(), v1.end(), out);
    std::cout << std::endl;
    std::copy(v2.begin(), v2.end(), out);
    std::cout << std::endl;
    std::copy(v3.begin(), v3.end(), out);
    std::cout << std::endl;
    // Generate 3 values into cout.
    std::generate_n(out, 3, gen);
    std::cout << std::endl;
    return 0;
}
Program Output:
2 4 8 16 2 4 8 4 2 4 8 16 32 2 4 8
ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 25.2.6