Replaces each element with the result of an operation

View versions (1)

Definition

The generate() algorithm is defined in the standard header <algorithm> and in the nonstandard backward-compatibility header <algo.h>.

Interface

#include <algorithm>
template < class ForwardIterator, class Generator >
   void generate(
      ForwardIterator first, 
      ForwardIterator last, 
      Generator gen
   );

Parameters:

ParameterDescription
firstA forward iterator addressing the position of the first element in the range to which values are to be assigned
lastA forward iterator addressing the position one past the final element in the range to which values are to be assigned
genA function object that is called with no arguments that is used to generate the values to be assigned to each of the elements in the range

Description

Generate algorithm uses a generator to generate each element of a range.

Return Value

None.

Complexity

The complexity is linear with last - first invocations of gen.

References

Example 1
Problem

This program illustrates the use of the STL generate() algorithm to fill a range of values in a vector of integers with values generated by the rand() function from <cstdlib>.

Workings
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdlib>

using namespace std;

int main()
{
  vector<int> v(10);
  cout <<"\nHere are the initial contents of v:\n";
  for (vector<int>::size_type i=0; i<v.size(); i++)
    cout <<v.at(i)<<" ";
  
  cout <<"\nNow we fill v with randomly generated integer values.";
  generate(v.begin(), v.end(), rand);
  cout <<"\nHere are the revised contents of v:\n";
  for (vector<int>::size_type i=0; i<v.size(); i++)
    cout <<v.at(i)<<" ";

  cout <<"\nFinally, we fill the last half of v with new randomly generated integer values.";
  generate(v.begin()+5, v.end(), rand);
  cout <<"\nHere are the revised contents of v:\n";
  for (vector<int>::size_type i=0; i<v.size(); i++)
    cout <<v.at(i)<<" ";

  return 0;
}
Solution

Output:

Here are the initial contents of v:
0 0 0 0 0 0 0 0 0 0

Now we fill v with randomly generated integer values.
Here are the revised contents of v:
41 18467 6334 26500 19169 15724 11478 29358 26962 24464

Finally, we fill the last half of v with new randomly generated integer values.
Here are the revised contents of v:
41 18467 6334 26500 19169 5705 28145 23281 16827 9961

See Also