Category: algorithms
Component type: function
Prototype template <class ForwardIterator, class Generator>
void generate(ForwardIterator first, ForwardIterator last, Generator gen);
Description Generate assigns the result of invoking gen, a function object that takes no arguments, to each element in the range [first, last). [1]
Definition Defined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h.
Requirements on types • ForwardIterator is a model of Forward Iterator. [2]
• ForwardIterator is mutable.
• Generator is a model of Generator.
• Generator's result type is convertible to ForwardIterator's value type.
Preconditions
• [first, last) is a valid range.
Complexity
Linear. Exactly last – first invocations of gen. [1]
Example Fill a vector with random numbers, using the standard C library function rand.
vector<int> V;
…
generate(V.begin(), V.end(), rand);
Notes [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.
See also copy, fill, fill_n, generate_n, iota
Category: algorithms
Component type: function
Prototype template <class OutputIterator, class Size, class Generator>
OutputIterator generate_n(OutputIterator first, Size n, Generator gen);
Description Generate_n assigns the result of invoking gen, a function object that takes no arguments, to each element in the range [first, first+n). [1] The return value is first + n.
Definition Defined in the standard header algorithm, and in the nonstandard backward-compatibility header algo.h.
Requirements on types • OutputIterator is a model of Output Iterator.
• Size is an integral type (either signed or unsigned).
• Generator is a model of Generator.
• Generator's result type is convertible to a type in OutputIterator 's set of value types.
Preconditions • n >= 0.
• There is enough space to hold n values. That is, [first, first+n) is a valid range.
Complexity Linear. Exactly n invocations of gen. [1]
Example Print 100 random numbers, using the C standard library function rand.
generate_n(ostream_iterator<int>(cout, '
'), 100, rand);
Notes [1] The function object gen is invoked n times (once for each iterator in the range [first, first+n) ), 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.
See also copy, fill, fill_n, generate, iota
Category: algorithms
Component type: function
Prototype template <class ForwardIterator, class T>