Aracılığıyla paylaş


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

Bir aralığı sınırlayıcıya göre alt aralıklara böler. Sınırlayıcı tek bir öğe veya öğelerin görünümü olabilir. Sınırlayıcı, sonuçta elde edilen alt aralıkların bir parçası değildir.

ile lazy_split_view arasındaki split_view birincil farklar şunlardır:

Görünüm Aralığı const bölebilir aralık türü
split_view hayır Veya üzerini destekler forward_range .
lazy_split_view evet Veya üzerini destekler input_range .

Bir "tembel" yapan lazy_split_view şey, bir sonraki sınırlayıcıya uygun görünmemesidir. Bu, destekleyebileceğiniz input_range , ancak split_view en azından forward_rangegerektirdiği anlamına gelir. Bunun nedeni input_range tek geçişli olması, ancak forward_range çoklu geçiş yinelemesine izin vermesidir.

Daha verimli olduğu için tercih edin split_view ; olan bir aralığı constbölmeniz gerekmediği sürece. Performans split_view açısından daha verimlidir.

A lazy_split_view , değerinden daha az verimli yineleyici artışına ve karşılaştırmaya split_viewsahiptir, ancak yine de O(1) değeridir. split_view Sınırlayıcılar arasındaki mesafe, alt aralıkların CPU önbelleğine sığacak kadar küçük olması durumunda daha iyi bir performansa sahiptir; bu durumda sınırlayıcı lookahead bir sonraki alt alanı etkili bir şekilde önceden önbelleğe alır.

Sözdizimi

template<input_range V, forward_range Pattern>
    requires view<V> && view<Pattern> &&
    indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to> &&
    (forward_range<V> || tiny_range<Pattern>)
class lazy_split_view : public view_interface<lazy_split_view<V, Pattern>>

Şablon parametreleri

Pattern
Sınırlayıcı sırasını belirten görünümün türü.
Gereksinim, (forward_range<V> || tiny-range <Pattern>) temel alınan aralık olmadığında forward_rangesınırlayıcının olması tiny_rangegerektiği anlamına gelir. A tiny_range , boyutu 0 veya 1 olan statik uzantılı bir aralıktır. tiny_range<T>sized_range<T>gerektirir ve T::size() 1'den küçük veya 1'e eşit bir sabit ifade olmalıdır.

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

Özellikler

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

Aralık bağdaştırıcısı: Temel aralık: lazy_splityerine input_range getirmeli veya daha yüksek Olmalıdır Görünüm yineleyici kategorisi: temel alınan aralık Öğe türüyle aynıdır: Boyut koleksiyonurange_reference_t<V>: Ortak aralık yok: Temel alınan aralık hem hem de forward_range commonolduğunda Evet. Ödünç alınan aralık: is -iterable yokconst: yalnızca temel alınan aralığın karşılanması forward_range ve yinelenebilir olması constdurumunda

Üyeler

Üye işlevleri Açıklama
Oluşturucular Görünümü oluşturma.
baseC++20 Temel alınan aralığı alın.
beginC++20 Görünümdeki ilk öğeye bir yineleyici alın.
endC++20 Görünümün sonunda sentinel'i alın.
Devralınan view_interface Açıklama
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 lazy_split_view

1) lazy_split_view() = default;
2) constexpr lazy_split_view(V base, Pattern pattern);
3) template<input_range R> requires constructible_from<V, views::all_t<R>> && 
        constructible_from<Pattern, single_view<range_value_t<R>>>
        constexpr lazy_split_view(R&& rg, range_value_t<R> e);

Şablon parametreleri

Pattern
Sınırlayıcının türü.

R
Aralığın türü.

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

Parametreler

e Görünümün bölüneceği yeri tanımlayan tek bir öğe. öğesi, sonuçta elde edilen alt bölümlerin bir parçası değildir.

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

pattern
Görünümün bölüneceği yeri tanımlayan öğelerin görünümü. Öğelerin görünümü, sonuçta elde edilen alt düzenlerin bir parçası değildir.

rg
Bölünecek aralık.

Dönüş değeri

Bir lazy_split_view veya daha fazla subrangeiçeren örnek.

Açıklamalar

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

1) Öğesi olmayan bir lazy_split_view oluşturun. Temel alınan görünüm varsayılan olarak oluşturulur. base() öğesinin V()bir kopyasını döndürür.
2) Sınırlayıcı dizisi kullanarak görünümü bölerek bir oluşturun lazy_split_view .
3) Bir sınırlayıcı öğesi kullanarak görünümü bölerek bir oluşturun lazy_split_view .

Örnek: lazy_split_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> rg{ 1, 2, 3, 1, 2, 3, 4, 5, 6 };

    // pipe syntax using range adaptor
    for (const auto& subrange : rg | std::views::split(3))
    {
        // Outputs:
        // 1 2
        // 1 2
        // 4 5 6
        for (const auto& elem : subrange)
        {
            std::cout << elem << ' ';
        }
        std::cout << '\n';
    }

    int delimiters[] = {2, 3};
    for (auto splitRange : std::views::split(rg, delimiters)) // ctor syntax
    {
        // outputs 1 1 4 5 6
        for (auto& i : splitRange)
        {
            std::cout << i << " ";
        }
    }
}
1 2
1 2
4 5 6
1 1 4 5 6

base

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

// Uses a copy constructor to return the underlying view
1) constexpr V base() const & requires std::copy_constructible<V>;

// Uses a move constructor to return the underlying view
2) 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();
constexpr auto begin() const requires forward_range<V> && forward_range<const V>

Parametreler

Hiçbiri.

Dönüş değeri

Görünümdeki ilk öğeye işaret eden bir yineleyici.

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.

1) constexpr auto end() const;
2) constexpr auto end() requires forward_range<V> && common_range<V>;

Parametreler

Hiçbiri.

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.

Açıklamalar

2) Gereksinim forward_range<V> , görünümün V en az ileriye doğru yineleyicisi olduğu anlamına gelir. Aralık yineleyicileri hakkında daha fazla bilgi için bkz . Sınıf özelliklerini görüntüleme. Gereksinim, common_range<V> görünümün V aynı yineleyici ve sentinel türlerine sahip olduğu anlamına gelir.

Ayrıca bkz.

<ranges>
lazy_split range adaptorsplit_view sınıfı
sınıfları görüntüleme