Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ generate(3C++) — Sun WorkShop 5.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

generate(3C++)

Standard C++ Library
Copyright 1998, Rogue Wave Software, Inc.

 

NAME

 
generate, generate_n
 
 - Initialize a container with values produced by a value-generator class.
 
 
 

SYNOPSIS

 
 

#include <algorithm>
 
template <class ForwardIterator, class Generator>

void generate(ForwardIterator first, ForwardIterator last,

Generator gen);

 
template <class OutputIterator, class Size, class Generator>

void generate_n(OutputIterator first, Size n, Generator gen);
 
 
 

DESCRIPTION

 
 
A value-generator function returns a value each time it is invoked. The algorithms generate and generate_n initialize (or reinitialize) a sequence by assigning the return value of the generator function gen to all the elements designated by iterators in the range [first, last) or [first, first + n). The function gen takes no arguments. (gen can be a function or a class with an operator () defined that takes no arguments.) 
 
generate_n assumes that there are at least n elements following first, unless first is an insert iterator. 
 
 
 

COMPLEXITY

 
 
The generate and generate_n algorithms invoke gen and assign its return value exactly last - first (or n) times. 
 
 
 

EXAMPLE

 
 
 

//
// generate.cpp
//

#include <algorithm>
#include <vector>
#include <iostream>

using namespace std;
 

// Value generator simply doubles the current value
// and returns it

template <class T>
class generate_val

{

private:

T val_;

public:

generate_val(const T& val) : val_(val) {}
T& operator()() { val_ += val_; return val_; }

};

 
int main()

{

int d1[4] = {1,2,3,4};
generate_val<int> gen(1);

 

// Set up two vectors

vector<int> v1(d1,d1 + 4), v2(d1,d1 + 4);

// Set up one empty vector

vector<int> v3;

 

// Generate values for all of v1
generate(v1.begin(),v1.end(),gen);

 

// Generate values for first 3 of v2
generate_n(v2.begin(),3,gen);

 

// Use insert iterator to generate 5 values for v3
generate_n(back_inserter(v3),5,gen);

 

// Copy all three to cout

ostream_iterator<int,char> out(cout," ");
copy(v1.begin(),v1.end(),out);
cout << endl;
copy(v2.begin(),v2.end(),out);
cout << endl;
copy(v3.begin(),v3.end(),out);
cout << endl;

 

// Generate 3 values for cout
generate_n(ostream_iterator<int>(cout," "),3,gen);

cout << endl;

 

return 0;

}
 

Program Output
 
 
 

 
2 4 8 16
2 4 8 4
2 4 8 16 32
2 4 8
 
 
 

WARNINGS

 
 
If your compiler does not support default template parameters, then you always need to supply the Allocator template argument. For instance, you have to write:
 
vector<int, allocator<int> >
 
instead of:
 
vector<int>
 
If your compiler does not support namespaces, then you do not need the using declaration for std. 
 
 
 

SEE ALSO

 
 
Function_Objects
 

Rogue Wave Software  —  Last change: 02 Apr 1998

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026