Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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