Freigeben über


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_rangebidirectional_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.
baseC++20 Rufen Sie den zugrunde liegenden Bereich ab.
beginC++20 Rufen Sie einen Iterator zum ersten Element ab.
endC++20 Rufen Sie den Sentinel am Ende der Ansicht ab.
predC++20 Rufen Sie einen Verweis auf das Prädikat ab, das bestimmt, welche Elemente abzulegen sind.
Geerbt von view_interface Beschreibung
backC++20 Rufen Sie das letzte Element ab.
emptyC++20 Testen Sie, ob die Ansicht leer ist.
frontC++20 Rufen Sie das erste Element ab.
operator boolC++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.

Abbildung eines Vektors mit den Elementen 10, 20 und 30. Das erste Element enthält 10 und ist mit

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:

Abbildung eines Vektors mit den Elementen 10, 20 und 30. Das erste Element enthält 10 und ist mit

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