Thinking in C++ Vol 2 - Practical Programming |
Prev |
Home |
Next |
These algorithms let you automatically fill a range with a
particular value or generate a set of values for a particular range. The fill
functions insert a single value multiple times into the container. The generate
functions use generators such as those described earlier to produce values to
insert into the container.
void fill(ForwardIterator
first, ForwardIterator last,
const T& value);
void fill_n(OutputIterator first, Size n, const T& value);
fill( ) assigns value to every
element in the range [first, last). fill_n( ) assigns value
to n elements starting at first.
void generate(ForwardIterator
first, ForwardIterator last,
Generator gen);
void generate_n(OutputIterator first, Size n, Generator
gen);
generate( ) makes a call to gen( )
for each element in the range [first, last), presumably to
produce a different value for each element. generate_n( ) calls gen( )
n times and assigns each result to n elements starting at first.
Example
The following example fills and generates into vectors.
It also shows the use of print( ):
//: C06:FillGenerateTest.cpp
// Demonstrates "fill" and "generate."
//{L} Generators
#include <vector>
#include <algorithm>
#include <string>
#include "Generators.h"
#include "PrintSequence.h"
using namespace std;
int main() {
vector<string> v1(5);
fill(v1.begin(), v1.end(), "howdy");
print(v1.begin(), v1.end(), "v1", "
");
vector<string> v2;
fill_n(back_inserter(v2), 7, "bye");
print(v2.begin(), v2.end(), "v2");
vector<int> v3(10);
generate(v3.begin(), v3.end(), SkipGen(4,5));
print(v3.begin(), v3.end(), "v3", "
");
vector<int> v4;
generate_n(back_inserter(v4),15, URandGen(30));
print(v4.begin(), v4.end(), "v4", "
");
} ///:~
A vector<string> is created with a predefined
size. Since storage has already been created for all the string objects
in the vector, fill( ) can use its assignment operator to
assign a copy of howdy to each space in the vector. Also, the default
newline separator is replaced with a space.
The second vector<string> v2 is not given an
initial size, so back_inserter( ) must be used to force new elements in instead of trying to assign to existing locations.
The generate( ) and generate_n( )
functions have the same form as the fill functions except that they use a
generator instead of a constant value. Here, both generators are demonstrated.
Thinking in C++ Vol 2 - Practical Programming |
Prev |
Home |
Next |