filter_view
class (standardní knihovna jazyka C++)
Zobrazení, které filtruje prvky oblasti, které neodpovídají predikátu.
Syntaxe
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>>;
Parametry šablony
V
Typ podkladové oblasti.
Pred
Typ predikátu, který určuje, které prvky mají být zachovány.
Zobrazení charakteristik
Popis následujících položek naleznete v tématu Zobrazení vlastností třídy.
Charakteristika | Popis |
---|---|
Adaptér rozsahu | views::filter |
Podkladová oblast | Musí splňovat input_range nebo vyšší |
Typ elementu | Stejné jako podkladová oblast |
Zobrazit kategorii iterátoru | input_range , forward_range nebo bidirectional_range v závislosti na podkladovém rozsahu |
Tříděný | No |
Je const -iterable |
No |
Společný rozsah | Pouze v případě, že základní rozsah splňuje požadavky common_range |
Zapůjčený rozsah | Pouze v případě, že základní rozsah splňuje požadavky borrowed_range |
Členové
Členské funkce | Popis |
---|---|
KonstruktoryC++20 | Vytvořte zobrazení. |
base C++20 |
Získejte podkladovou oblast. |
begin C++20 |
Získejte iterátor k prvnímu prvku. |
end C++20 |
Získejte sentinel na konci zobrazení. |
pred C++20 |
Získejte odkaz na predikát, který určuje, které prvky se mají vypustit. |
Zděděno z view_interface | Popis |
back C++20 |
Získejte poslední prvek. |
empty C++20 |
Otestujte, jestli je zobrazení prázdné. |
front C++20 |
Získejte první prvek. |
operator bool C++20 |
Otestujte, jestli zobrazení není prázdné. |
Požadavky
Hlavička: <ranges>
(od C++20)
Obor názvů: std::ranges
Je vyžadována možnost kompilátoru: /std:c++20
nebo novější.
Konstruktory
Vytvoření instance objektu filter_view
1) constexpr filter_view(V base, P pred);
2) filter_view() requires default_initializable<V> && default_initializable<Pred> = default;
Parametry
base
Podkladové zobrazení.
pred
Predikát, který určuje, které prvky mají být v podkladovém zobrazení zachovány.
Informace o typech parametrů šablony naleznete v tématu Parametry šablony.
Vrácená hodnota
Instance filter_view
.
Poznámky
Nejlepší způsob, jak vytvořit, filter_view
je použití adaptéru rozsahu views::filter
. Adaptéry rozsahu představují zamýšlený způsob vytváření tříd zobrazení. Typy zobrazení jsou vystaveny pro případ, že chcete vytvořit vlastní typ zobrazení.
1) Vytvoření inicializované filter_view
hodnoty . Predikát a podkladové zobrazení musí být inicializovatelné jako výchozí.
2) Přesuňte konstrukce filter_view
ze base
zobrazení a pred
predikátu. Obě base
a pred
jsou přesunuty přes std::move()
.
Příklad: 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
Získá základní rozsah.
// 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() &&;
Parametry
Žádná
Návraty
Podkladové zobrazení.
begin
Získejte iterátor k prvnímu prvku v zobrazení.
constexpr auto begin();
Vrácená hodnota
Iterátor ukazující na první prvek v zobrazení. Toto chování není definováno, pokud zobrazení nemá predikát.
end
Získejte sentinel na konci zobrazení.
constexpr auto end()
Vrácená hodnota
Sentinel, který následuje za posledním prvkem v zobrazení:
pred
Získejte odkaz na predikát, který určuje, které úvodní prvky se mají vypustit.
constexpr const Pred& pred() const;
Vrácená hodnota
Odkaz na predikát.
Poznámky
Pokud třída neukládá predikát, chování není definováno.
Příklad: 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)
}
Viz také
<ranges>
filter
adaptér rozsahu
drop_while()
take_while()
zobrazit třídy