Алгоритм 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'; |
}