|
Программирование >> Инициализация объектов класса, структура
template< class InputIterator, class Function > Function for each( InputIterator first, InputIterator last, Function func ); for each() применяет объект-функцию func к каждому элементу в диапазоне [first,last) . func не может изменять элементы, поскольку итератор записи не гарантирует поддержки присваивания. Если же модификация необходима, следует воспользоваться алгоритмом transform() . func может возвращать значение, но оно #include <algorithm> #include <vector> #include <iostream.h> template <class Type> void print elements( Type elem ) { cout << elem << ; } int main() vector< int, allocator > ivec; for ( int ix = 0; ix < 10; ix++ ) ivec.push back( ix ); void (*pfi)( int ) = print elements; for each( ivec.begin(), ivec.end(), pfi ); return 0; игнорируется. template< class ForwardIterator, class Generator > void generate( ForwardIterator first, Алгоритм generate() ForwardIterator last, Generator gen ); generate() заполняет диапазон, ограниченный парой итераторов [first,last) , путем последовательного вызова gen, который может быть объектом-функцией или указателем на функцию. #include <algorithm> #include <list> #include <iostream.h> int odd by twos() { static int seed = -1; return seed += 2; template <class Type> void print elements( Type elem ) { cout << elem << ; } int main() list< int, allocator > ilist( 10 ); void (*pfi)( int ) = print elements; generate( ilist.begin(), ilist.end(), odd by twos ); печатается: элементы в списке, перв вызов: 1 3 5 7 9 11 13 15 17 19 cout << элементы в списке, перв вызов:\n ; for each( ilist.begin(), ilist.end(), pfi ); generate( ilist.begin(), ilist.end(), odd by twos ); печатается: элементы в списке, второй вызов: 21 23 25 27 29 31 33 35 37 39 cout << \n\nэлементы в списке, второй вызов:\n ; for each( ilist.begin(), ilist.end(), pfi ); return 0; template< class OutputIterator, class Size, class Generator > void Алгоритм generate n() generate n( OutputIterator first, Size n, Generator gen ); generate n() заполняет последовательность, начиная с first, n раз вызывая gen, который может быть объектом-функцией или указателем на функцию. #include <algorithm> #include <iostream.h> #include <list> class even by twos { public: even by twos( int seed = 0 ) : seed( seed ){} int operator()() { return seed += 2; } private: int seed; template <class Type> void print elements( Type elem ) { cout << elem << ; } int main() list< int, allocator > ilist( 10 ); void (*pfi)( int ) = print elements; generate n( ilist.begin(), ilist.size(), even by twos() ); печатается: generate n с even by twos(): 2 4 6 8 10 12 14 16 18 20 cout << generate n с even by twos():\n ; for each( ilist.begin(), ilist.end(), pfi ); cout << \n ; generate n( ilist.begin(), ilist.size(), even by twos( 100 печатается: generate n с even by twos( 100 ): ) ) ; 102 104 106 108 110 112 114 116 118 120 cout << generate n с even by twos( 100 ):\n for each( ilist.begin(), ilist.end(), pfi ); template< class InputIterator1, class InputIterator2 > bool includes( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2 ); template< class InputIterator1, class InputIterator2, class Compare > bool includes( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Алгоритм includes() Compare comp ); includes() проверяет, каждый ли элемент последовательности [first1,last1) входит в последовательность [first2,last2) . Первый вариант предполагает, что
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |