std::ranges::views::filter, std::ranges::filter_view
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::input_range V, std::indirect_unary_predicate<ranges::iterator_t<V>> Pred > |
(1) | (seit C++20) |
| namespace views { inline constexpr /* nicht spezifiziert */ filter = /* nicht spezifiziert */; |
(2) | (seit C++20) |
| Aufruf-Signatur |
||
| template< ranges::viewable_range R, class Pred > requires /* siehe unten */ |
(seit C++20) | |
| template< class Pred > constexpr /* Range-Adaptor-Closure */ filter( Pred&& pred ); |
(seit C++20) | |
view einer zugrundeliegenden Sequenz ohne die Elemente darstellt, die ein Prädikat nicht erfüllen.filter_view modelliert die Konzepte bidirectional_range, forward_range, input_range und common_range, wenn die zugrundeliegende view V die entsprechenden Konzepte modelliert.
Inhalt |
[edit] Datenmember
| Mitglied | Beschreibung |
V base_ (private) |
die zugrunde liegende Ansicht ((exposition-only member object*) |
copyable-box<Pred>(bis C++23)movable-box<Pred>(seit C++23) pred_ (private) |
verpackt das Prädikat, das zum Filtern von Elementen von base_ verwendet wird((exposition-only member object*) |
non-propagating-cache<ranges::iterator_t<V>> begin_ (private)(nur vorhanden, wenn V forward_range erfüllt)
|
ein Objekt, das einen Iterator zum ersten Element von base_ zwischenspeichert, das pred_ erfüllt((exposition-only member object*) |
[edit] Member-Funktionen
konstruiert eine filter_view(öffentliche Memberfunktion) | |
gibt die zugrunde liegende Ansicht V zurück(öffentliche Memberfunktion) | |
gibt eine Referenz auf das in filter_view gespeicherte Prädikat zurück(öffentliche Memberfunktion) | |
gibt den Anfangs-Iterator der filter_view zurück(öffentliche Memberfunktion) | |
gibt das Sentinel der filter_view zurück(öffentliche Memberfunktion) | |
Geerbt von std::ranges::view_interface | |
gibt zurück, ob die abgeleitete Ansicht leer ist, bereitgestellt nur, wenn sie sized_range oder forward_range erfüllt(public member function of std::ranges::view_interface<D>) | |
| (C++23) |
gibt einen konstanten Iterator zum Anfang des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| (C++23) |
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur, wenn ranges::empty darauf anwendbar ist (public member function of std::ranges::view_interface<D>) | |
gibt das erste Element in der abgeleiteten View zurück, bereitgestellt, wenn sie forward_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
gibt das letzte Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie bidirectional_range und common_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
std::ranges::filter_view::filter_view
| filter_view() requires std::default_initializable<V> && std::default_initializable<Pred> = default; |
(1) | (seit C++20) |
| constexpr explicit filter_view( V base, Pred pred ); |
(2) | (seit C++20) |
base_ über seinen Standard-Member-Initialisierer (= V()) und initialisiert pred_ standardmäßig (was das enthaltene Pred wertinitialisiert).base_ mit std::move(base) und initialisiert pred_ mit std::move(pred).Parameter
| base | - | zu filternde Range |
| pred | - | zu filterndes Prädikat |
std::ranges::filter_view::base
| constexpr V base() const& requires std::copy_constructible<V>; |
(1) | (seit C++20) |
| constexpr V base() &&; |
(2) | (seit C++20) |
std::ranges::filter_view::pred
| constexpr const Pred& pred() const; |
(seit C++20) | |
Gibt eine Referenz auf das enthaltene Pred-Objekt zurück. Das Verhalten ist undefiniert, wenn pred_ keinen Wert enthält.
std::ranges::filter_view::begin
| constexpr /*iterator*/ begin(); |
(nur Exposition*) | |
Um die für das range-Konzept erforderliche amortisierte konstante Zeit zu bieten, speichert diese Funktion das Ergebnis im filter_view-Objekt für nachfolgende Aufrufe. Äquivalent zu
if constexpr (!ranges::forward_range<V>) return /*iterator*/{*this, ranges::find_if(base_, std::ref(*pred_))}; else { if (!begin_.has_value()) begin_ = ranges::find_if(base_, std::ref(*pred_)); // caching return /*iterator*/{*this, begin_.value())}; }
Das Verhalten ist undefiniert, wenn pred_ keinen Wert enthält.
std::ranges::filter_view::end
| constexpr auto end(); |
(seit C++20) | |
Gibt einen Iterator zum Ende zurück. Äquivalent zu
if constexpr (ranges::common_range<V>) return /*iterator*/{*this, ranges::end(base_)}; else return /*sentinel*/{*this};
[edit] Deduktionshilfen
| template< class R, class Pred > filter_view( R&&, Pred ) -> filter_view<views::all_t<R>, Pred>; |
(seit C++20) | |
[edit] Verschachtelte Klassen
der Iteratortyp von filter_view((nur zur Veranschaulichung)*) | |
der Sentinel-Typ von filter_view, wenn die zugrundeliegende View keine common_range ist((nur zur Veranschaulichung)*) |
[edit] Beispiel
#include <iostream> #include <ranges> int main() { auto even = [](int i) { return 0 == i % 2; }; auto square = [](int i) { return i * i; }; for (int i : std::views::iota(0, 6) | std::views::filter(even) | std::views::transform(square)) std::cout << i << ' '; std::cout << '\n'; }
Ausgabe
0 4 16
[edit] Defect Reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3714 (P2711R1) |
C++20 | der Multi-Parameter-Konstruktor war nicht explizit | explizit gemacht |
| P2325R3 | C++20 | wenn Pred nicht default_initializable ist, der Standardkonstruktorkonstruiert eine filter_view, die kein Pred enthält |
die filter_view ist ebenfallsnicht default_initializable |
[edit] Siehe auch
ein view, der aus den anfänglichen Elementen eines anderen view besteht, bis zum ersten Element, für das ein Prädikat false zurückgibt(Klassen-Template) (Range-Adaptor-Objekt) |