std::experimental::ranges::count, std::experimental::ranges::count_if
| Definiert in Header <experimental/ranges/algorithm> |
||
| template< InputIterator I, Sentinel<I> S, class T, class Proj = ranges::identity > requires IndirectRelation<ranges::equal_to<>, projected<I, Proj>, const T*> |
(1) | (Ranges TS) |
| template< InputRange R, class T, class Proj = ranges::identity > requires IndirectRelation<ranges::equal_to<>, |
(2) | (Ranges TS) |
| template< InputIterator I, Sentinel<I> S, class Proj = ranges::identity, IndirectUnaryPredicate<projected<I, Proj>> Pred > |
(3) | (Ranges TS) |
| template< InputRange R, class Proj = ranges::identity, IndirectUnaryPredicate<projected<ranges::iterator_t<R>, Proj>> Pred > |
(4) | (Ranges TS) |
Gibt die Anzahl der Elemente im Bereich [first, last) zurück, die bestimmte Kriterien erfüllen.
Ungeachtet der oben gezeigten Deklarationen ist die tatsächliche Anzahl und Reihenfolge der Template-Parameter für Algorithmusdeklarationen nicht spezifiziert. Wenn also explizite Template-Argumente beim Aufruf eines Algorithmus verwendet werden, ist das Programm wahrscheinlich nicht portabel.
Inhalt |
[edit] Parameter
| first, last | - | der Bereich der zu untersuchenden Elemente |
| r | - | der Bereich der zu untersuchenden Elemente |
| value | - | Der zu suchende Wert |
| pred | - | Prädikat, das auf die projizierten Elemente angewendet wird |
| proj | - | Projektion, die auf die Elemente angewendet wird |
[edit] Rückgabewert
Anzahl der Elemente, die die Bedingung erfüllen.
[edit] Komplexität
Genau last - first Vergleiche / Anwendungen des Prädikats, und dieselbe Anzahl von Anwendungen der Projektion.
[edit] Hinweise
Für die Anzahl der Elemente im Bereich [first, last) ohne zusätzliche Kriterien siehe ranges::distance.
[edit] Mögliche Implementierung
| Erste Version |
|---|
template<InputIterator I, Sentinel<I> S, class T, class Proj = ranges::identity> requires IndirectRelation<ranges::equal_to<>, projected<I, Proj>, const T*> ranges::difference_type_t<I> count(I first, S last, const T& value, Proj proj = Proj{}) { ranges::difference_type_t<I> ret = 0; for (; first != last; ++first) if (ranges::invoke(proj, *first) == value) ++ret; return ret; } |
| Zweite Version |
template<InputIterator I, Sentinel<I> S, class Proj = ranges::identity, IndirectUnaryPredicate<projected<I, Proj>> Pred> ranges::difference_type_t<I> count_if(I first, S last, Pred pred, Proj proj = Proj{}) { ranges::difference_type_t<I> ret = 0; for (; first != last; ++first) if (ranges::invoke(pred, ranges::invoke(proj, *i))) ++ret; return ret; } |
[edit] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[edit] Siehe auch
| Gibt die Anzahl der Elemente zurück, die bestimmte Kriterien erfüllen (Funktionstempelat) | |
| gibt die Distanz zwischen einem Iterator und einem Sentinel zurück, oder zwischen dem Anfang und dem Ende eines Bereichs (Funktionsvorlage) |