Namespaces
Variants

std::experimental::ranges:: find_end

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

class Proj = ranges:: identity ,
IndirectRelation < I2, projected < I1, Proj >> Pred = ranges:: equal_to <> >
I1 find_end ( I1 first1, S1 last1, I2 first2, S2 last2,

Pred pred = Pred { } , Proj proj = Proj { } ) ;
(1) (ranges TS)
template < ForwardRange R1, ForwardRange R2, class Proj = ranges:: identity ,

IndirectRelation < ranges:: iterator_t < R2 > ,
projected < ranges:: iterator_t < R1 > , Proj >> Pred = ranges:: equal_to <> >
ranges:: safe_iterator_t < R1 > find_end ( Rng1 && rng1, Rng2 && rng2,

Pred pred = Pred { } , Proj proj = Proj { } ) ;
(2) (ranges TS)
1) Ищет последнее вхождение последовательности [ first2 , last2 ) в диапазоне [ first1 , last1 ) (после проекции с помощью proj ).
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 - предикат для сравнения элементов
proj - проекция для применения к элементам первого диапазона

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

Итератор на начало последнего вхождения последовательности [ first2 , last2 ) в диапазон [ first1 , last1 ) (после проекции с proj ).

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

Сложность

Не более S * (N - S + 1) применений предиката и проекции, где S = last2 - first2 и N = last1 - first1 .

Примечания

Проекция применяется только к диапазону [ first1 , last1 ) .

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

template<ForwardIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2,
         class Proj = ranges::identity,
         IndirectRelation<I2, projected<I1, Proj>> Pred = ranges::equal_to<>>
I1 find_end(I1 first1, S1 last1, I2 first2, S2 last2,
            Pred pred = Pred{}, Proj proj = Proj{})
{
    I1 result = ranges::next(first1, last1);
    if (first2 == last2)
        return result;
    while (true)
    {
        I1 new_result = ranges::search(first1, last1, first2, last2, pred, proj);
        if (new_result == last1)
            break;
        else
        {
            result = new_result;
            first1 = result;
            ++first1;
        }
    }
    return result;
}
**Примечание:** Весь код C++ внутри тегов `
` и `` оставлен без изменений, как и требовалось. HTML-теги и атрибуты также сохранены в оригинальном виде.

Пример

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

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