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 func- tion or a class with an operator () defined that takes no arguments.) generate_n assumes that there are at least n elements fol- lowing 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 parame- ters, 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
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |