Aracılığıyla paylaş


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

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

İlgili görünüm sınıfıdır lazy_split_view . 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 .

Tercih split_view , olan bir aralığı bölmeniz gerekmediği sürece daha verimli olmasıdır const.

Sözdizimi

template<forward_range V, forward_range Pattern>
    requires view<V> && view<Pattern> &&
    indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to>
class split_view : public view_interface<split_view<V, Pattern>>;

Şablon parametreleri

Pattern
Sınırlayıcı sırasını belirten görünümün türü.

V
Temel alınan görünümün 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::split
Temel alınan aralık Temel alınan aralıkla aynı
Öğe türü range_reference_t<V>
Yineleyici kategoriyi görüntüleme Karşılayan forward_range
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 Hayır

Üyeler

Üye işlevleri Açıklama
Oluşturucular 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.
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 split_view

1) split_view() requires default_initializable<V> && default_initializable<Pattern> = default;
2) constexpr 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 split_view(R&& rg, range_value_t<R> e);

Parametreler

e
Görünümün bölüneceği yeri tanımlayan tek bir öğe. öğesi, sonuçta elde edilen görünümün 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 görünümün bir parçası değildir.

rg
Bölünecek aralık.

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

Dönüş değeri

Bir split_view veya daha fazla alt düzenleme içeren bir örnek.

Açıklamalar

Oluşturmanın split_view en iyi yolu, aralık bağdaştırıcısını views::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) Varsayılan olarak oluşturulduğunda bir split_view oluşturun. Temel alınan görünüm ve pattern varsayılan olarak oluşturulur. base() öğesinin V()bir kopyasını döndürür.
2) Bir sınırlayıcı dizisi kullanarak görünümü bölerek bir oluşturun split_view .
3) Tek bir split_view sınırlayıcı kullanarak görünümü bölerek bir oluşturun.

Örnek 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
    {
        for (auto& i : splitRange)
        {
            std::cout << i << " "; // 1 1 4 5 6
        }
    }
}
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();

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.

constexpr auto end();

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.

Ayrıca bkz.

<ranges>
split_view aralık bağdaştırıcısı
lazy_split_view sınıfı
sınıfları görüntüleme