С++ для начинающих

       

Алгоритм search()


template< class ForwardIterator1, class ForwardIterator2 >

ForwardIterator

search( ForwardIterator1 first1, ForwardIterator1 last1,

        ForwardIterator2 first2, ForwardIterator2 last2 );

template< class ForwardIterator1, class ForwardIterator2,

          class BinaryPredicate >

ForwardIterator

search( ForwardIterator1 first1, ForwardIterator1 last1,

        ForwardIterator2 first2, ForwardIterator2 last2,

        BinaryPredicate pred );

Если даны два диапазона, то search() возвращает итератор, указывающий на первую позицию в диапазоне [first1,last1), начиная с которой второй диапазон входит как подпоследовательность. Если подпоследовательность не найдена, возвращается last1. Например, в слове Mississippi подпоследовательность iss встречается дважды, и search() возвращает итератор, указывающий на начало первого вхождения. В первом варианте для сравнения элементов используется оператор равенства, во втором – указанная программистом операция сравнения.

#include <algorithm>

#include <vector>

#include <iostream.h>

/* печатается:

   Ожидаем найти подстроку 'ate': a t e

   Ожидаем найти подстроку 'vat': v a t

*/

int main()

{

     ostream_iterator< char >  ofile( cout, " " );

          

           char str[ 25 ]   = "a fine and private place";

           char substr[] = "ate";

                 

           char *found_str = search(str,str+25,substr,substr+3);

           cout << "Ожидаем найти подстроку 'ate': ";

     copy( found_str, found_str+3, ofile ); cout << '\n';

                 

           vector< char, allocator > vec( str, str+24 );

           vector< char, allocator > subvec(3);

           subvec[0]='v'; subvec[1]='a'; subvec[2]='t';

          

           vector< char, allocator >::iterator iter;

     iter = search( vec.begin(), vec.end(),

                    subvec.begin(), subvec.end(),

                    equal_to< char >() );

           cout << "Ожидаем найти подстроку 'vat': ";

     copy( iter, iter+3, ofile ); cout << '\n';

}



Содержание раздела