Aracılığıyla paylaş


filter_view class (C++ Standart Kitaplığı)

Bir aralığın koşulla eşleşmeyen öğelerini filtreleyen bir görünüm.

Sözdizimi

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>>;

Şablon parametreleri

V
Temel alınan aralığın türü.

Pred
Tutulacak öğeleri belirleyen koşulun türü.

Özellikleri görüntüleme

Aşağıdaki girdilerin açıklaması için bkz . Sınıf özelliklerini görüntüleme

Characteristic Açıklama
Aralık bağdaştırıcısı views::filter
Temel alınan aralık Veya üzerini karşılaması input_range gerekir
Öğe türü Temel alınan aralıkla aynı
Yineleyici kategoriyi görüntüleme input_range, forward_rangeveya bidirectional_range temel alınan aralığa bağlı olarak
Boyutlu Hayır
- constyinelenebilir Hayır
Ortak aralık Yalnızca temel alınan aralık karşılanırsa common_range
Ödünç alınan aralık Yalnızca temel alınan aralık karşılanırsa borrowed_range

Üyeler

Üye işlevleri Açıklama
OluşturucularC++20 Görünümü oluşturma.
baseC++20 Temel alınan aralığı alın.
beginC++20 İlk öğeye bir yineleyici alın.
endC++20 Görünümün sonunda sentinel'i alın.
predC++20 Hangi öğelerin bırakıldığını belirleyen koşula bir başvuru alın.
view_interface devralındı Açıklama
backC++20 Son öğeyi alın.
emptyC++20 Görünümün boş olup olmadığını test edin.
frontC++20 İlk öğeyi alın.
operator boolC++20 Görünümün boş olup olmadığını test edin.

Gereksinimler

Üst bilgi: <ranges> (C++20'den beri)

Ad alanı: std::ranges

Derleyici Seçeneği: /std:c++20 veya üzeri gereklidir.

Oluşturucular

Bir örneğini oluşturma filter_view

1) constexpr filter_view(V base, P pred);
2) filter_view() requires default_initializable<V> && default_initializable<Pred> = default;

Parametreler

base
Temel alınan görünüm.

pred
Temel alınan görünümden hangi öğelerin tutulduğunu belirleyen koşul.

Şablon parametre türleri hakkında bilgi için bkz . Şablon parametreleri.

Dönüş değeri

Bir filter_view örnek.

Açıklamalar

Oluşturmanın filter_view en iyi yolu, aralık bağdaştırıcısını views::filter kullanmaktır. Aralık bağdaştırıcıları, görünüm sınıfları oluşturmanın amaçlanan yoludur. Kendi özel görünüm türünüzü oluşturmak istemeniz durumunda görünüm türleri kullanıma sunulur.

1) Değer tarafından filter_viewbaşlatılan bir oluşturun. Koşul ve temel alınan görünüm varsayılan olarak başlatılabilir olmalıdır.
2) Bir görünümden ve koşuldan base pred öğesini filter_view taşır. hem hem de base pred aracılığıyla std::move()taşınır.

Örnek: 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

Temel alınan aralığı alır.

// 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() &&;

Parametreler

Hiçbiri.

Döndürülenler

Temel alınan görünüm.

begin

Görünümdeki ilk öğeye bir yineleyici alın.

constexpr auto begin();

Dönüş değeri

Görünümdeki ilk öğeye işaret eden bir yineleyici. Görünümün bir koşulu yoksa davranış tanımlanmamıştır.

10, 20 ve 30 öğelerini içeren bir vektör resmi. İlk öğe 10 içerir ve begin() olarak etiketlenir. Son öğe 30 içerir ve 'son öğe' olarak etiketlenmiştir. Son öğeden sonraki bir sanal kutu sentinel'i gösterir ve end() olarak etiketlenmiştir.

end

Görünümün sonunda sentinel'i alın.

constexpr auto end()

Dönüş değeri

Görünümdeki son öğeyi izleyen sentinel:

10, 20 ve 30 öğelerini içeren bir vektör resmi. İlk öğe 10 içerir ve begin() olarak etiketlenir. Son öğe 30 içerir ve 'son öğe' olarak etiketlenmiştir. Son öğeden sonraki bir sanal kutu sentinel'i gösterir ve end() olarak etiketlenmiştir.

pred

Hangi öncü öğelerin bırakıldığını belirleyen koşula bir başvuru alın.

constexpr const Pred& pred() const;

Dönüş değeri

Koşula bir başvuru.

Açıklamalar

Sınıf bir koşulu depolamıyorsa, davranış tanımsız olur.

Örnek 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)
}

Ayrıca bkz.

<ranges>
filter aralık bağdaştırıcısı
drop_while()
take_while()
sınıfları görüntüleme