Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questo articolo
Visualizzazione che filtra gli elementi di un intervallo che non corrispondono al predicato.
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>>;
V
Tipo dell'intervallo sottostante.
Pred
Tipo del predicato che determina quali elementi conservare.
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 |
| 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. |
Intestazione: <ranges> (da C++20)
Spazio dei nomi: std::ranges
Opzione del compilatore: /std:c++20 o versione successiva è obbligatoria.
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;
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.
Istanza di filter_view.
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().
// 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
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() &&;
Nessuna.
Visualizzazione sottostante.
Ottiene un iteratore al primo elemento nella visualizzazione.
constexpr auto begin();
Iteratore che punta al primo elemento della visualizzazione. Il comportamento non è definito se la vista non ha un predicato.
Ottenere l'sentinel alla fine della visualizzazione.
constexpr auto end()
Sentinel che segue l'ultimo elemento nella visualizzazione:
Ottenere un riferimento al predicato che determina quali elementi iniziali eliminare.
constexpr const Pred& pred() const;
Riferimento al predicato.
Se la classe non archivia un predicato, il comportamento non è definito.
// 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)
}
<ranges>
filter adattatore di intervallo
drop_while()
take_while()
classi di visualizzazione