```
template<class ForwardIterator, class Generator>
void generate(ForwardIterator first, ForwardIterator last,
Generator gen);
template<class OutputIterator, class Size, class Generator>
OutputIterator generate_n(OutputIterator first, Size n, Generator gen);
```

*Effects:*
The first algorithm invokes the function object gen and assigns the return
value of gen through all the iterators in the range
[first,last). The second algorithm invokes the function object
gen and assigns the return value of gen through all the iterators in
the range [first,first + n) if n is positive,
otherwise it does nothing.

*Requires:*
gen takes no arguments,
Size
shall be convertible to an integral type ([conv.integral], [class.conv]).

*Returns:* generate_n returns first + n for non-negative values of n
and first for negative values.

*Complexity:*
Exactly
last - first,
n, or 0
invocations of gen and assignments, respectively.