std::experimental::ranges:: adjacent_find
|
Definido en el encabezado
<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
)
dos elementos consecutivos idénticos. Los elementos se comparan usando
pred
después de ser proyectados con
proj
.
No obstante las declaraciones representadas anteriormente, el número real y el orden de los parámetros de plantilla para las declaraciones de algoritmos no está especificado. Por lo tanto, si se utilizan argumentos de plantilla explícitos al llamar a un algoritmo, el programa probablemente no sea portable.
Contenidos |
Parámetros
| first, last | - | el rango de elementos a examinar |
| r | - | el rango de elementos a examinar |
| pred | - | predicado para usar al comparar los elementos proyectados |
| proj | - | proyección a aplicar a los elementos |
Valor de retorno
Un iterador al primero del primer par de elementos idénticos, es decir, el primer iterador
i
tal que tanto
i
como
i + 1
están en el rango
[
first
,
last
)
y
ranges::
invoke
(
pred,
ranges::
invoke
(
proj,
*
i
)
,
ranges::
invoke
(
proj,
*
(
i
+
1
)
)
)
!
=
false
.
Si no se encuentran tales elementos, se devuelve un iterador que es igual a last .
Complejidad
Si el rango no está vacío, exactamente
min((result - first) + 1, (last - first) - 1)
aplicaciones del predicado donde
result
es el valor de retorno, y como máximo el doble de aplicaciones de la proyección.
Implementación posible
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; } |
Ejemplo
|
Esta sección está incompleta
Razón: sin ejemplo |
Véase también
|
encuentra los dos primeros elementos adyacentes que son iguales (o satisfacen un predicado dado)
(function template) |
|
|
elimina elementos duplicados consecutivos en un rango
(function template) |