Namensräume
Varianten
Aktionen

std::experimental::ranges::find_first_of

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
 
template< InputIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2,

          class Proj1 = ranges::identity, class Proj2 = ranges::identity,
          IndirectRelation<projected<I1, Proj1>,
                           projected<I2, Proj2>> Pred = ranges::equal_to<> >
I1 find_first_of( I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{},

                  Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{} );
(1) (Ranges TS)
template< InputRange R1, ForwardRange R2,

          class Proj1 = ranges::identity, class Proj2 = ranges::identity,
          IndirectRelation<projected<ranges::iterator_t<R1>, Proj1>,
                           projected<ranges::iterator_t<R2>, Proj2>> Pred = ranges::equal_to<> >
ranges::safe_iterator_t<R1> find_first_of( R1&& r1, R2&& r2, Pred pred = Pred{},

                                           Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{} );
(2) (Ranges TS)
1) Sucht im Bereich [first1last1) nach einem beliebigen Element aus dem Bereich [first2last2), nachdem die Bereiche mittels proj1 bzw. proj2 projiziert wurden. Die projizierten Elemente werden mit pred verglichen.
2) Entspricht (1), verwendet aber r1 als ersten Quellbereich und r2 als zweiten Quellbereich, als ob ranges::begin(r1) als first1, ranges::end(r1) als last1, ranges::begin(r2) als first2 und ranges::end(r2) als last2 verwendet würden.

Inhalt

[edit] Parameter

first1, last1 - der Bereich der zu untersuchenden Elemente
r1 - der Bereich der zu untersuchenden Elemente
first2, last2 - der Bereich der zu durchsuchenden Elemente
r2 - der Bereich der zu durchsuchenden Elemente
pred - Prädikat zum Vergleichen der projizierten Elemente mit
proj1 - Projektion, die auf die Elemente im ersten Bereich angewendet wird
proj2 - Projektion, die auf die Elemente im zweiten Bereich angewendet wird

[edit] Rückgabewert

Iterator auf das erste Element im Bereich [first1last1), das gleich einem Element aus dem Bereich [first2last2) ist, nach der Projektion. Wenn kein solches Element gefunden wird, wird ein Iterator zurückgegeben, der gleich last1 ist.

[edit] Komplexität

Höchstens (S * N) Anwendungen des Prädikats und jeder Projektion, wobei S = distance(last2 - first2) und N = last1 - first1.

[edit] Mögliche Implementierung

template<InputIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2,
         class Proj1 = ranges::identity, class Proj2 = ranges::identity,
         IndirectRelation<projected<I1, Proj1>, 
                          projected<I2, Proj2>> Pred = ranges::equal_to<>>
I1 find_first_of(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = Pred{},
                 Proj1 proj1 = Proj1{}, Proj2 proj2 = Proj2{})
{
    for (; first1 != last1; ++first1)
        for (ForwardIt it = first2; it != last2; ++it)
            if (ranges::invoke(pred, ranges::invoke(proj1, *first1),
                                     ranges::invoke(proj2, *it)))
                return first1;
    return first1;
}

[edit] Beispiel

[edit] Siehe auch

Sucht nach einem der Elemente aus einer Menge von Elementen
(Funktionstempelat) [edit]
Findet das erste Element, das bestimmte Kriterien erfüllt
(Funktionsvorlage) [bearbeiten]