std::experimental::ranges:: search
|
Определено в заголовочном файле
<experimental/ranges/algorithm>
|
||
|
template
<
ForwardIterator I1, Sentinel
<
I1
>
S1,
ForwardIterator I2, Sentinel
<
I2
>
S2,
class
Pred
=
ranges::
equal_to
<>
,
|
(1) | (ranges TS) |
|
template
<
ForwardRange R1, ForwardRange R2,
class
Pred
=
ranges::
equal_to
<>
,
class
Proj1
=
ranges::
identity
,
class
Proj2
=
ranges::
identity
>
|
(2) | (ranges TS) |
[
first2
,
last2
)
в диапазоне
[
first1
,
last1
)
. Элементы сравниваются с использованием
pred
после проецирования с помощью
proj2
и
proj1
соответственно.
Несмотря на приведённые выше объявления, фактическое количество и порядок параметров шаблона для объявлений алгоритмов не определено. Таким образом, если при вызове алгоритма используются явные аргументы шаблона, программа, вероятно, является непереносимой.
Содержание |
Параметры
| 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; } } } |
` и `` оставлен без изменений в соответствии с инструкциями. HTML-разметка и атрибуты также сохранены в оригинальном виде.
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
выполняет поиск первого вхождения диапазона элементов
(шаблон функции) |
|
|
находит последнюю последовательность элементов в заданном диапазоне
(шаблон функции) |
|
|
возвращает
true
если одно множество является подмножеством другого
(шаблон функции) |
|
|
определяет, идентичны ли два набора элементов
(шаблон функции) |
|
|
находит первый элемент, удовлетворяющий определенным критериям
(шаблон функции) |
|
|
возвращает
true
если один диапазон лексикографически меньше другого
(шаблон функции) |
|
|
находит первую позицию, в которой два диапазона различаются
(шаблон функции) |
|
|
выполняет поиск заданного количества последовательных копий элемента в диапазоне
(шаблон функции) |