Namespaces
Variants

std::experimental::ranges:: find_end

From es.cppreference.net
Definido en el encabezado <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) Busca la última ocurrencia de la secuencia [ first2 , last2 ) en el rango [ first1 , last1 ) (después de la proyección con proj ).
2) Igual que (1) , pero utiliza r1 como el primer rango fuente y r2 como el segundo rango fuente, como si se usara ranges:: begin ( r1 ) como first1 , ranges:: end ( r1 ) como last1 , ranges:: begin ( r2 ) como first2 , y ranges:: end ( r2 ) como last2 .

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.

Contenido

Parámetros

first1, last1 - el rango de elementos a examinar
r1 - el rango de elementos a examinar
first2, last2 - el rango de elementos a buscar
r2 - el rango de elementos a buscar
pred - predicado para comparar los elementos
proj - proyección a aplicar a los elementos en el primer rango

Valor de retorno

Iterador al inicio de la última ocurrencia de la secuencia [ first2 , last2 ) en el rango [ first1 , last1 ) (después de la proyección con proj ).

Si [ first2 , last2 ) está vacío o si no se encuentra dicha secuencia, se devuelve un iterador que es igual a last1 .

Complejidad

Como máximo S * (N - S + 1) aplicaciones del predicado y proyección, donde S = last2 - first2 y N = last1 - first1 .

Notas

La proyección solo se aplica al rango [ first1 , last1 ) .

Implementación posible

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;
}

Ejemplo

Véase también

encuentra la última secuencia de elementos en un rango determinado
(plantilla de función & objeto función de algoritmo)
busca un rango de elementos
(plantilla de función)
devuelve true si un conjunto es subconjunto de otro
(plantilla de función)
encuentra los primeros dos elementos adyacentes que son iguales (o satisfacen un predicado dado)
(plantilla de función)
encuentra el primer elemento que satisface criterios específicos
(plantilla de función)
busca cualquiera de un conjunto de elementos
(plantilla de función)
busca un número de copias consecutivas de un elemento en un rango
(plantilla de función)