# generate

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`

Copyright © 1999 Silicon Graphics, Inc. All Rights Reserved. TrademarkInformation