Namespaces
Variants

std::experimental::ranges:: search

From cppreference.net
Определено в заголовочном файле <experimental/ranges/algorithm>
template < ForwardIterator I1, Sentinel < I1 > S1,

ForwardIterator I2, Sentinel < I2 > S2, class Pred = ranges:: equal_to <> ,
class Proj1 = ranges:: identity , class Proj2 = ranges:: identity >
requires IndirectlyComparable < I1, I2, Pred, Proj1, Proj2 >
I1 search ( I1 first1, S1 last1, I2 first2, S2 last2,

Pred pred = Pred { } , Proj1 proj1 = Proj1 { } , Proj2 proj2 = Proj2 { } ) ;
(1) (ranges TS)
template < ForwardRange R1, ForwardRange R2, class Pred = ranges:: equal_to <> ,

class Proj1 = ranges:: identity , class Proj2 = ranges:: identity >
requires IndirectlyComparable < ranges:: iterator_t < R1 > , ranges:: iterator_t < R2 > ,
Pred, Proj1, Proj2 >
ranges:: safe_iterator_t < R1 > search ( R1 && r1, R2 && r2, Pred pred = Pred { } ,

Proj1 proj1 = Proj1 { } , Proj2 proj2 = Proj2 { } ) ;
(2) (ranges TS)
1) Ищет первое вхождение последовательности элементов [ first2 , last2 ) в диапазоне [ first1 , last1 ) . Элементы сравниваются с использованием pred после проецирования с помощью proj2 и proj1 соответственно.
2) То же, что и (1) , но использует r1 в качестве первого исходного диапазона и r2 в качестве второго исходного диапазона, как если бы использовались ranges:: begin ( r1 ) как first1 , ranges:: end ( r1 ) как last1 , ranges:: begin ( r2 ) как first2 , и ranges:: end ( r2 ) как last2 .

Несмотря на приведённые выше объявления, фактическое количество и порядок параметров шаблона для объявлений алгоритмов не определено. Таким образом, если при вызове алгоритма используются явные аргументы шаблона, программа, вероятно, является непереносимой.

Содержание

Параметры

first1, last1 - диапазон элементов для проверки
r1 - диапазон элементов для проверки
first2, last2 - диапазон элементов для поиска
r2 - диапазон элементов для поиска
pred - предикат для применения к проецируемым элементам
proj1 - проекция для применения к элементам первого диапазона
proj2 - проекция для применения к элементам второго диапазона

Возвращаемое значение

Итератор на начало первого вхождения последовательности [ first2 , last2 ) в диапазоне [ first1 , last1 ) . Если [ first2 , last2 ) пуст, возвращается first1 . Если такое вхождение не найдено, возвращается итератор, равный last1 .

Сложность

Максимум S * N применений предиката и каждой проекции, где S = last2 - first2 и N = last1 - first1 .

Возможная реализация

template<ForwardIterator I1, Sentinel<I1> S1,
         ForwardIterator I2, Sentinel<I2> S2, class Pred = ranges::equal_to<>,
         class Proj1 = ranges::identity, class Proj2 = ranges::identity>
    requires IndirectlyComparable<I1, I2, Pred, Proj1, Proj2>
I1 search(I1 first1, S1 last1, I2 first2, S2 last2,
          Pred pred = Pred{}, Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})
{
    for (; ; ++first1)
    {
        I1 it = first1;
        for (I2 it2 = first2; ; (void)++it, (void)++it2)
        {
            if (it2 == last2)
                return first1;
            if (it == last1)
                return it;
            if (!ranges::invoke(pred, ranges::invoke(proj1, *it),
                                      ranges::invoke(proj2, *it2)))
                break;
        }
    }
}
**Примечание:** Весь код C++ внутри тегов `
` и `` оставлен без изменений в соответствии с инструкциями. HTML-разметка и атрибуты также сохранены в оригинальном виде.

Пример

Смотрите также

выполняет поиск первого вхождения диапазона элементов
(шаблон функции)
находит последнюю последовательность элементов в заданном диапазоне
(шаблон функции)
возвращает true если одно множество является подмножеством другого
(шаблон функции)
определяет, идентичны ли два набора элементов
(шаблон функции)
находит первый элемент, удовлетворяющий определенным критериям
(шаблон функции)
возвращает true если один диапазон лексикографически меньше другого
(шаблон функции)
находит первую позицию, в которой два диапазона различаются
(шаблон функции)
выполняет поиск заданного количества последовательных копий элемента в диапазоне
(шаблон функции)