std::experimental::ranges:: adjacent_find
|
Определено в заголовочном файле
<experimental/ranges/algorithm>
|
||
|
template
<
ForwardIterator I, Sentinel
<
I
>
S,
class
Proj
=
ranges::
identity
,
IndirectRelation
<
projected
<
I, Proj
>>
Pred
=
ranges::
equal_to
<>
>
|
(1) | (ranges TS) |
|
template
<
ForwardRange R,
class
Proj
=
ranges::
identity
,
IndirectRelation
<
projected
<
ranges::
iterator_t
<
R
>
, Proj
>>
Pred
=
ranges::
equal_to
<>
>
|
(2) | (ranges TS) |
[
first
,
last
)
двух последовательных одинаковых элементов. Элементы сравниваются с помощью
pred
после проецирования с помощью
proj
.
Несмотря на приведённые выше объявления, фактическое количество и порядок параметров шаблона для объявлений алгоритмов не определено. Таким образом, если при вызове алгоритма используются явные аргументы шаблона, программа, вероятно, является непереносимой.
Содержание |
Параметры
| first, last | - | диапазон элементов для проверки |
| r | - | диапазон элементов для проверки |
| pred | - | предикат для сравнения проецируемых элементов |
| proj | - | проекция, применяемая к элементам |
Возвращаемое значение
Итератор на первый элемент первой пары идентичных элементов, то есть первый итератор
i
такой, что оба
i
и
i + 1
находятся в диапазоне
[
first
,
last
)
и
ranges::
invoke
(
pred,
ranges::
invoke
(
proj,
*
i
)
,
ranges::
invoke
(
proj,
*
(
i
+
1
)
)
)
!
=
false
.
Если такие элементы не найдены, возвращается итератор, равный last .
Сложность
Если диапазон непуст, ровно
min((result - first) + 1, (last - first) - 1)
применений предиката, где
result
является возвращаемым значением, и не более чем вдвое больше применений проекции.
Возможная реализация
template<ForwardIterator I, Sentinel<I> S, class Proj = ranges::identity, IndirectRelation<projected<I, Proj>> Pred = ranges::equal_to<>> I adjacent_find(I first, S last, Pred pred = Pred{}, Proj proj = Proj{}) { if (first == last) return first; I next = first; ++next; while (next != last) { if (ranges::invoke(pred, ranges::invoke(proj, *first), ranges::invoke(proj, *next))) return first; ++next; ++first; } return next; } |
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
находит первые два соседних элемента, которые равны (или удовлетворяют заданному предикату)
(шаблон функции) |
|
|
удаляет последовательные дублирующиеся элементы в диапазоне
(шаблон функции) |