filter_view
Klasse (C++-Standardbibliothek)
Eine Ansicht, die die Elemente eines Bereichs herausfiltert, die nicht mit dem Prädikat übereinstimmen.
Syntax
template<ranges::input_range V, indirect_unary_predicate<iterator_t<V>> Pred>
requires view<V> && is_object_v<Pred>
class filter_view : public view_interface<filter_view<V, Pred>>;
Vorlagenparameter
V
Der Typ des zugrunde liegenden Bereichs.
Pred
Der Typ des Prädikats, das bestimmt, welche Elemente beibehalten werden sollen.
Eigenschaften der Ansicht
Eine Beschreibung der folgenden Einträge finden Sie unter Anzeigen von Klassenmerkmalen
Merkmal | Beschreibung |
---|---|
Range Adaptor | views::filter |
Zugrunde liegender Bereich | Muss erfüllen input_range oder höher |
Elementtyp | Identisch mit dem zugrunde liegenden Bereich |
Iteratorkategorie anzeigen | input_range , oder forward_range bidirectional_range abhängig vom zugrunde liegenden Bereich |
Größer eingestellt | No |
Ist const -iterierbar |
No |
Allgemeiner Bereich | Nur, wenn der zugrunde liegende Bereich erfüllt ist common_range |
Geliehener Bereich | Nur, wenn der zugrunde liegende Bereich erfüllt ist borrowed_range |
Member
Memberfunktionen | Beschreibung |
---|---|
Konstruktoren C++20 | Erstellen Sie die Ansicht. |
base C++20 |
Rufen Sie den zugrunde liegenden Bereich ab. |
begin C++20 |
Rufen Sie einen Iterator zum ersten Element ab. |
end C++20 |
Rufen Sie den Sentinel am Ende der Ansicht ab. |
pred C++20 |
Rufen Sie einen Verweis auf das Prädikat ab, das bestimmt, welche Elemente abzulegen sind. |
Geerbt von view_interface | Beschreibung |
back C++20 |
Rufen Sie das letzte Element ab. |
empty C++20 |
Testen Sie, ob die Ansicht leer ist. |
front C++20 |
Rufen Sie das erste Element ab. |
operator bool C++20 |
Testen Sie, ob die Ansicht nicht leer ist. |
Anforderungen
Header: <ranges>
(seit C++20)
Namespace:std::ranges
Compileroption: /std:c++20
oder höher ist erforderlich.
Konstruktoren
Erstellen einer Instanz einer filter_view
1) constexpr filter_view(V base, P pred);
2) filter_view() requires default_initializable<V> && default_initializable<Pred> = default;
Parameter
base
Die zugrunde liegende Ansicht.
pred
Das Prädikat, das bestimmt, welche Elemente aus der zugrunde liegenden Ansicht beibehalten werden sollen.
Informationen zu den Vorlagenparametertypen finden Sie unter Vorlagenparameter.
Rückgabewert
Eine filter_view
-Instanz.
Hinweise
Die beste Methode zum Erstellen eines Steuerelements filter_view
ist die Verwendung des views::filter
Bereichsadapters. Bereichsadapter sind die beabsichtigte Möglichkeit zum Erstellen von Ansichtsklassen. Die Ansichtstypen werden für den Fall verfügbar gemacht, dass Sie ihren eigenen benutzerdefinierten Ansichtstyp erstellen möchten.
1) Erstellen Sie einen wertinitialisierten filter_view
. Das Prädikat und die zugrunde liegende Ansicht müssen standardmäßig initialisierbar sein.
2) Verschieben von Konstrukten filter_view
aus einer base
Ansicht und einem pred
Prädikat. Beide base
und pred
werden über std::move()
verschoben.
Beispiel: filter_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
void print(auto v)
{
for (auto& x : v)
{
std::cout << x << ' ';
}
std::cout << '\n';
}
int main()
{
std::vector<int> v{0, 1, -2, 3, -4, -5, 6};
auto myView = std::views::filter(v, [](int i) {return i > 0; });
print(myView); // outputs 1 3 6
auto myView2 = v | std::views::filter([](int i) {return i < 3; });
print(myView2); // outputs 0 1 -2 -4 -5
}
1 3 6
0 1 -2 -4 -5
base
Ruft den zugrunde liegenden Bereich ab.
// Uses a copy constructor to return the underlying range
constexpr V base() const& requires std::copy_constructible<V>;
// Uses std::move() to return the underlying range
constexpr V base() &&;
Parameter
Keine.
Gibt zurück
Die zugrunde liegende Ansicht.
begin
Rufen Sie einen Iterator zum ersten Element in der Ansicht ab.
constexpr auto begin();
Rückgabewert
Ein Iterator, der auf das erste Element in der Ansicht zeigt. Das Verhalten ist nicht definiert, wenn die Ansicht kein Prädikat aufweist.
end
Rufen Sie den Sentinel am Ende der Ansicht ab.
constexpr auto end()
Rückgabewert
Der Sentinel, der auf das letzte Element in der Ansicht folgt:
pred
Rufen Sie einen Verweis auf das Prädikat ab, das bestimmt, welche führenden Elemente abzulegen sind.
constexpr const Pred& pred() const;
Rückgabewert
Ein Verweis auf das Prädikat.
Hinweise
Wenn die Klasse kein Prädikat speichert, ist das Verhalten nicht definiert.
Beispiel: pred
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{0, 1, 2, 3, -4, 5, 6};
auto mv = v | std::views::filter(
[](int i) {return i < 5; }); // keep the elements < 5
std::cout << std::boolalpha << mv.pred()(v[6]); // outputs "false" because v[6] = 6 and 6 is not less than 5 (the predicate)
}
Siehe auch
<ranges>
filter
Range Adaptor
drop_while()
take_while()
Anzeigen von Klassen