|
Программирование >> Инициализация объектов класса, структура
template< class ForwardIterator1, class ForwardIterator2 > ForwardIterator1 find end( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2 ); template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate > ForwardIterator1 find end( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, Алгоритм find end() BinaryPredicate pred ); В последовательности, ограниченной итераторами [first1,last1), ведется поиск последнего вхождения последовательности, ограниченной парой [first2,last2). Например, если первая последовательность - это Mississippi, а вторая - ss, то find end() возвращает итератор, указывающий на первую s во втором вхождении ss. Если вторая последовательность не входит в первую, то возвращается last1. В первом варианте используется оператор равенства, определенный для типа элементов контейнера, а во втором - бинарный предикат, переданный пользователем. #include <algorithm> #include <vector> #include <iostream.h> #include <assert.h> int main() { int array[ 17 ] = { 7,3,3,7,6,5,8,7,2,1,3,7,6,3,8,4,3 }; int subarray[ 3 ] = { 3, 7, 6 }; int * found it; find найти последнее вхождение последовательности 3,7,6 в массив и вернуть аес первого ее элемента ... found it = find end( &array[0], &array[17], &subarray[0], &subarray[3] ); assert( found it == &array[10] ); vector< int, allocator > ivec( array, array+17 ); vector< int, allocator > subvec( subarray, subarray+3 ); vector< int, allocator >::iterator found it2; found it2 = find end( ivec.begin(), ivec.end(), subvec.begin(), subvec.end(), equal to<int>() ); assert( found it2 == ivec.begin()+10 ); cout << ok: find end правильно вернула начало << последнего вхождения последовательности: 3,7,6!\n ; template< class ForwardIterator1, class ForwardIterator2 > ForwardIterator1 find first of( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2 ); template< class ForwardIterator1, class ForwardIterator2, class BinaryPredicate > ForwardIterator1 find first of( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, Алгоритм find first of() BinaryPredicate pred ); Последовательность, ограниченная парой [first2, last2), содержит элементы, поиск которых ведется в последовательности, ограниченной итераторами [first1,last1) . Допустим, нужно найти первую гласную в последовательности символов synesthesia. Для этого определим вторую последовательность как aeiou. find first of() возвращает итератор, указывающий на первое вхождение любого элемента #include <algorithm> #include <vector> #include <string> #include <iostream.h> int main() string s array[] = { Ee , eE , ee , Oo , oo , ee }; возвращает первое вхождение ee - &s array[2] string to find[] = { oo , gg , ee }; string *found it = find first of( s array, s array+6, to find, to find+3 ); печатается: найдено: ee &s array[2]: 0x7fff2dac &found it: 0x7fff2dac if ( found it != &s array[6] ) cout << найдено: << *found it << \n\t << &s array[2]:\t << &s array[2] << \n\t << &found it:\t << found it << \n\n ; vector< string, allocator > svec( s array, s array+6); vector< string, allocator > svec find( to find, to find+2 ); возвращает вхождение oo - svec.end()-2 vector< string, allocator >::iterator found it2; found it2 = find first of( svec.begin(), svec.end(), svec find.begin(), svec find.end(), eal to<string> () ); печатает: тоже найдено: oo &svec.end()-2: 0x100067b0 &found it2: 0x100067b0 if ( found it2 != svec.end() ) cout << тоже найдено: << *found it2 << \n\t << &svec.end()-2:\t << svec.end()-2 << \n\t << &found it2:\t << found it2 << \n ; контейнера, а во втором - бинарный предикат pred. Алгоритм for each() последовательности гласных букв, в данном случае e. Если же первая последовательность не содержит ни одного элемента из второй, то возвращается last1. В первом варианте используется оператор равенства, определенный для типа элементов
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |