Condividi tramite


filter_view classe (libreria standard C++)

Visualizzazione che filtra gli elementi di un intervallo che non corrispondono al predicato.

Sintassi

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>>;

Parametri del modello

V
Tipo dell'intervallo sottostante.

Pred
Tipo del predicato che determina quali elementi conservare.

Visualizzare le caratteristiche

Per una descrizione delle voci seguenti, vedere Visualizzare le caratteristiche della classe

Caratteristica Descrizione
Adattatore di intervallo views::filter
Intervallo sottostante Deve soddisfare input_range o superiore
Tipo di elemento Uguale all'intervallo sottostante
Visualizzare la categoria iteratore input_range, forward_rangeo bidirectional_range a seconda dell'intervallo sottostante
Dimensioni No
Iterabile const No
Intervallo comune Solo se l'intervallo sottostante soddisfa common_range
Intervallo preso in prestito Solo se l'intervallo sottostante soddisfa borrowed_range

Membri

Funzioni membro Descrizione
Costruttori C++20 Costruisci la vista.
baseC++20 Ottenere l'intervallo sottostante.
beginC++20 Ottenere un iteratore al primo elemento.
endC++20 Ottenere l'sentinel alla fine della visualizzazione.
predC++20 Ottenere un riferimento al predicato che determina gli elementi da eliminare.
Ereditato da view_interface Descrizione
backC++20 Ottiene l'ultimo elemento.
emptyC++20 Verificare se la visualizzazione è vuota.
frontC++20 Ottenere il primo elemento.
operator boolC++20 Verificare se la visualizzazione non è vuota.

Requisiti

Intestazione: <ranges> (da C++20)

Spazio dei nomi: std::ranges

Opzione del compilatore: /std:c++20 o versione successiva è obbligatoria.

Costruttori

Costruire un'istanza di un oggetto filter_view

1) constexpr filter_view(V base, P pred);
2) filter_view() requires default_initializable<V> && default_initializable<Pred> = default;

Parametri

base
Visualizzazione sottostante.

pred
Predicato che determina gli elementi da mantenere dalla visualizzazione sottostante.

Per informazioni sui tipi di parametri del modello, vedere Parametri del modello.

Valore restituito

Istanza di filter_view.

Osservazioni:

Il modo migliore per creare un filter_view oggetto consiste nell'usare l'adattatore views::filter di intervallo. Gli adattatori di intervallo sono il modo previsto per creare classi di visualizzazione. I tipi di visualizzazione vengono esposti nel caso in cui si voglia creare un tipo di visualizzazione personalizzato.

1) Creare un valore inizializzato filter_view. Il predicato e la vista sottostante devono essere inizializzabili per impostazione predefinita.
2) Sposta costruisce l'oggetto filter_view da una base vista e un pred predicato. Entrambi base e pred vengono spostati tramite std::move().

Esempio: 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

Ottiene l'intervallo sottostante.

// 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() &&;

Parametri

Nessuna.

Valori restituiti

Visualizzazione sottostante.

begin

Ottiene un iteratore al primo elemento nella visualizzazione.

constexpr auto begin();

Valore restituito

Iteratore che punta al primo elemento della visualizzazione. Il comportamento non è definito se la vista non ha un predicato.

Immagine di un vettore con gli elementi 10, 20 e 30. Il primo elemento contiene 10 ed è etichettato begin(). L'ultimo elemento contiene 30 e viene etichettato come 'ultimo elemento'. Una casella immaginaria dopo l'ultimo elemento indica la sentinella ed è etichettata end().

end

Ottenere l'sentinel alla fine della visualizzazione.

constexpr auto end()

Valore restituito

Sentinel che segue l'ultimo elemento nella visualizzazione:

Immagine di un vettore con gli elementi 10, 20 e 30. Il primo elemento contiene 10 ed è etichettato begin(). L'ultimo elemento contiene 30 e viene etichettato come 'ultimo elemento'. Una casella immaginaria dopo l'ultimo elemento indica la sentinella ed è etichettata end().

pred

Ottenere un riferimento al predicato che determina quali elementi iniziali eliminare.

constexpr const Pred& pred() const;

Valore restituito

Riferimento al predicato.

Osservazioni:

Se la classe non archivia un predicato, il comportamento non è definito.

Esempiopred

// 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)
}

Vedi anche

<ranges>
filter adattatore di intervallo
drop_while()
take_while()
classi di visualizzazione