Пространства имён
Варианты
Действия

std::search_n

Материал из cppreference.com
 
 
Алгоритмы
Функции
Немодифицирующие линейные операции
Модифицирующие линейные операции
Разделение
Сортировка (на отсортированных промежутках)
Бинарный поиск (на отсортированных промежутках)
Множества (на отсортированных промежутках)
Куча
Минимум/максимум
Числовые операции
Библиотека C
 
Заголовочный файл <algorithm>
template< class ForwardIt, class Size, class T >
ForwardIt1 search_n( ForwardIt first, ForwardIt last, Size count, const T& value );
(1)
template< class ForwardIt, class Size, class T, class BinaryPredicate >

ForwardIt1 search_n( ForwardIt first, ForwardIt last, Size count, const T& value,

                     BinaryPredicate p );
(2)

Ищет в диапазоне [first, last) первую последовательность count одинаковых элементов, каждый из которых равен заданному значению value. Первый вариант использует operator== для сравнения элементов, второй вариант использует заданный бинарный предикат p.

Содержание

[править] Параметры

first, last - диапазон элементов для проверки
count - длина искомой последовательности
value - значение элементов искомой последовательности
p - binary predicate which returns ​true if the elements should be treated as equal.

The signature of the predicate function should be equivalent to the following:

bool pred(const Type1 &a, const Type2 &b);

The signature does not need to have const &, but the function must not modify the objects passed to it.
The type  Type1 must be such that an object of type ForwardIt can be dereferenced and then implicitly converted to  Type1. The type  Type2 must be such that an object of type T can be implicitly converted to  Type2.

Type requirements
-
ForwardIt must meet the requirements of ForwardIterator.

[править] Возвращаемое значение

Итератор на начало найденной последовательности в диапазоне [first, last). Если такая последовательность не найдена, возвращается last.

[править] Сложность

Не больше last - first применений предиката.

[править] Возможная реализация

First version
template<class ForwardIt, class Size, class T>
ForwardIt1 search_n(ForwardIt first, ForwardIt last,
                          Size count, const T& value)
{
    Size curr_count = 0;
    ForwardIt result, t_last = first;
    std::advance(t_last, std::distance(first, last) - count + 1);
 
    for (; first != t_last; first++) {
        curr_count = 0;
        result = first;
        while (*first == value) {
            curr_count++;
            if (curr_count == count) {
                return result;
            }
            ++first;
        }
    }
    return last;
}
Second version
template<class ForwardIt, class Size, class T, class BinaryPredicate>
ForwardIt1 search_n(ForwardIt first, ForwardIt last,
                          Size count, const T& value, BinaryPredicate p)
{
    Size curr_count = 0;
    ForwardIt result, t_last = first;
    std::advance(t_last, std::distance(first, last) - count + 1);
 
    for (; first != t_last; first++) {
        curr_count = 0;
        result = first;
        while (p(*first == value)) {
            curr_count++;
            if (curr_count == count) {
                return result;
            }
            ++first;
        }
    }
    return last;
}

[править] Пример

[править] См. также

находит последний последовательности элементов в определенном диапазоне
Original:
finds the last sequence of elements in a certain range
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(шаблон функции) [edit]
находит первый элемент, удовлетворяющий определенным критериям
Original:
finds the first element satisfying specific criteria
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(шаблон функции) [edit]
searches for a range of elements
(шаблон функции) [edit]