| Category: algorithms | Component type: function |
template <class ForwardIterator class Generator> void generate(ForwardIterator first ForwardIterator last Generator gen);
vector<int> V; ... generate(V.begin() V.end() rand);
[1] The function object 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.
[2] The reason that generate requires its argument to be a mutable Forward Iterator rather than just an Output Iterator is that it uses a range [first last) of iterators. There is no sensible way to describe a range of Output Iterators because it is impossible to compare two Output Iterators for equality. The generate_n algorithm does have an interface that permits use of an Output Iterator.