std::experimental::ranges:: search
|
Definiert in Header
<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
)
im Bereich
[
first1
,
last1
)
. Elemente werden mit
pred
verglichen, nachdem sie mit
proj2
bzw.
proj1
projiziert wurden.
Ungeachtet der oben dargestellten Deklarationen sind die tatsächliche Anzahl und Reihenfolge der Template-Parameter für Algorithmusdeklarationen nicht spezifiziert. Daher ist das Programm wahrscheinlich nicht portabel, wenn explizite Template-Argumente beim Aufruf eines Algorithmus verwendet werden.
Inhaltsverzeichnis |
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, das auf die projizierten Elemente angewendet wird |
| proj1 | - | Projektion, die auf die Elemente im ersten Bereich angewendet wird |
| proj2 | - | Projektion, die auf die Elemente im zweiten Bereich angewendet wird |
Rückgabewert
Ein Iterator zum Anfang des ersten Vorkommens der Sequenz
[
first2
,
last2
)
im Bereich
[
first1
,
last1
)
. Wenn
[
first2
,
last2
)
leer ist, wird
first1
zurückgegeben. Wenn kein solches Vorkommen gefunden wird, wird ein Iterator zurückgegeben, der gleich
last1
ist.
Komplexität
Höchstens
S * N
Anwendungen des Prädikats und jeder Projektion, wobei
S
=
last2
-
first2
und
N
=
last1
-
first1
.
Mögliche Implementierung
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; } } } |
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Siehe auch
|
sucht nach dem ersten Vorkommen eines Elementbereichs
(Funktions-Template) |
|
|
findet die letzte Sequenz von Elementen in einem bestimmten Bereich
(Funktions-Template) |
|
|
gibt
true
zurück, falls eine Menge Teilmenge einer anderen ist
(Funktions-Template) |
|
|
bestimmt, ob zwei Elementmengen identisch sind
(Funktions-Template) |
|
|
findet das erste Element, das spezifische Kriterien erfüllt
(Funktions-Template) |
|
|
gibt
true
zurück, falls ein Bereich lexikographisch kleiner als ein anderer ist
(Funktions-Template) |
|
|
findet die erste Position, an der zwei Bereiche sich unterscheiden
(Funktions-Template) |
|
|
sucht nach einer Anzahl aufeinanderfolgender Kopien eines Elements in einem Bereich
(Funktions-Template) |