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


Алгоритм search_n()


template< class ForwardIterator, class Size, class Type >

ForwardIterator

search_n( ForwardIterator first, ForwardIterator last,

          Size count, const Type &value );

template< class ForwardIterator, class Size,

          class Type, class BinaryPredicate >

ForwardIterator

search_n( ForwardIterator first, ForwardIterator last,

          Size count, const Type &value, BinaryPredicate pred );

search_n() ищет в последовательности [first,last) подпоследовательность, состоящую из count повторений значения value. Если она не найдена, возвращается last. Например, для поиска подстроки ss в строке Mississippi следует задать value равным 's', а count равным 2. Если же нужно найти две расположенные подряд подстроки ssi, то value задается равным "ssi", а count снова 2. search_n() возвращает итератор на первый элемент со значением value. В первом варианте для сравнения элементов используется оператор равенства, во втором – указанная программистом операция сравнения.

#include <algorithm>

#include <vector>

#include <iostream.h>



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

   Ожидаем найти два вхождения 'o': o o

   Ожидаем найти подстроку 'mou':  m o u

*/

          

int main()

{

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

           const char blank = ' ';

           const char oh    = 'o';

           char str[ 26 ]  = "oh my a mouse ate a moose";

           char *found_str = search_n( str, str+25, 2, oh );

                 

           cout << "Ожидаем найти два вхождения 'o': ";

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

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

                 

           // найти первую последовательность из трех символов,

           // ни один из которых не равен пробелу: mou of mouse

           vector< char, allocator >::iterator iter;

     iter = search_n( vec.begin(), vec.end(), 3,

                            blank, not_equal_to< char >() );

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

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

}



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