|Category: algorithms ||Component type: function |
template <class ForwardIterator, class Generator>
void generate(ForwardIterator first, ForwardIterator last, Generator gen);
Generate assigns the result of invoking
gen, a functors that takes no arguments, to each element in the range
[first, last). 
Defined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h.
Requirements on types
ForwardIterator is a model of ForwardIterator. 
ForwardIterator is mutable.
Generator is a model of Generator.
Generator's result type is convertible to
ForwardIterator's value type.
[first, last) is a valid range.
last - first invocations of
Fill a vector with random numbers, using the standard C library function
generate(V.begin(), V.end(), rand);
 The functors
gen is invoked for each iterator in the range
[first, last), as opposed to just being invoked a single time outside the loop. This distinction is important because a Generator need not return the same result each time it is invoked; it is permitted to read from a file, refer to and modify local state, and so on.
 The reason that
generate requires its argument to be a mutable ForwardIterator, rather than just an OutputIterator, is that it uses a range
[first, last) of iterators. There is no sensible way to describe a range of OutputIterator, because it is impossible to compare two OutputIterator for equality. The
generate_n algorithm does have an interface that permits use of an OutputIterator.