filter_view
class (Standardowa biblioteka C++)
Widok, który filtruje elementy zakresu, które nie są zgodne z predykatem.
Składnia
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 szablonu
V
Typ bazowego zakresu.
Pred
Typ predykatu, który określa, które elementy mają być zachowywane.
Właściwości widoku
Opis poniższych wpisów można znaleźć w temacie View class characteristics (Wyświetlanie właściwości klas)
Characteristic | opis |
---|---|
Adapter zakresu | views::filter |
Zakres bazowy | Musi spełniać input_range lub wyższe |
Typ elementu | Taki sam jak zakres bazowy |
Wyświetl kategorię iteratora | input_range , forward_range lub bidirectional_range w zależności od bazowego zakresu |
Wielkości | Nie. |
Jest const iterowalne |
Nie. |
Wspólny zakres | Tylko wtedy, gdy zakres bazowy spełnia common_range |
Pożyczony zakres | Tylko wtedy, gdy zakres bazowy spełnia borrowed_range |
Elementy członkowskie
Funkcje składowe | Opis |
---|---|
KonstruktoryC++20 | Skonstruuj widok. |
base C++20 |
Pobierz zakres bazowy. |
begin C++20 |
Pobierz iterator do pierwszego elementu. |
end C++20 |
Pobierz element sentinel na końcu widoku. |
pred C++20 |
Uzyskaj odwołanie do predykatu określającego, które elementy mają być upuszczane. |
Dziedziczone z view_interface | Opis |
back C++20 |
Pobierz ostatni element. |
empty C++20 |
Sprawdź, czy widok jest pusty. |
front C++20 |
Pobierz pierwszy element. |
operator bool C++20 |
Sprawdź, czy widok nie jest pusty. |
Wymagania
Nagłówek: <ranges>
(od C++20)
Przestrzeń nazw: std::ranges
Opcja kompilatora: /std:c++20
lub nowsza jest wymagana.
Konstruktory
Konstruowanie wystąpienia obiektu filter_view
1) constexpr filter_view(V base, P pred);
2) filter_view() requires default_initializable<V> && default_initializable<Pred> = default;
Parametry
base
Widok bazowy.
pred
Predykat określający, które elementy należy zachować z widoku bazowego.
Aby uzyskać informacje o typach parametrów szablonu, zobacz Parametry szablonu.
Wartość zwracana
filter_view
Wystąpienie.
Uwagi
Najlepszym sposobem utworzenia elementu filter_view
jest użycie adaptera views::filter
zakresu. Adaptery zakresów są zamierzonym sposobem tworzenia klas widoków. Typy widoków są widoczne w przypadku utworzenia własnego niestandardowego typu widoku.
1) Utwórz wartość zainicjowaną filter_view
. Predykat i widok bazowy muszą być inicjowane domyślnie.
2) Przeniesienie konstruuje filter_view
element z base
widoku i pred
predykatu. Obie base
metody i pred
są przenoszone za pośrednictwem metody std::move()
.
Przykład: 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
Pobiera zakres bazowy.
// 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
Brak.
Zwraca
Widok bazowy.
begin
Pobierz iterator do pierwszego elementu w widoku.
constexpr auto begin();
Wartość zwracana
Iterator wskazujący pierwszy element w widoku. Zachowanie jest niezdefiniowane, jeśli widok nie ma predykatu.
end
Pobierz element sentinel na końcu widoku.
constexpr auto end()
Wartość zwracana
Sentinel, który jest zgodny z ostatnim elementem w widoku:
pred
Uzyskaj odwołanie do predykatu określającego, które elementy wiodące do upuszczania.
constexpr const Pred& pred() const;
Wartość zwracana
Odwołanie do predykatu.
Uwagi
Jeśli klasa nie przechowuje predykatu, zachowanie jest niezdefiniowane.
Przykład: 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)
}
Zobacz też
<ranges>
filter
adapter zakresu
drop_while()
take_while()
klasy widoków