Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
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_rangelub bidirectional_range w zależności od bazowego zakresu |
| Wielkości | Nie. |
Jest constiterowalne |
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. |
baseC++20 |
Pobierz zakres bazowy. |
beginC++20 |
Pobierz iterator do pierwszego elementu. |
endC++20 |
Pobierz element sentinel na końcu widoku. |
predC++20 |
Uzyskaj odwołanie do predykatu określającego, które elementy mają być upuszczane. |
| Dziedziczone z view_interface | Opis |
backC++20 |
Pobierz ostatni element. |
emptyC++20 |
Sprawdź, czy widok jest pusty. |
frontC++20 |
Pobierz pierwszy element. |
operator boolC++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