Bagikan melalui


split_view kelas (Pustaka Standar C++)

Memisahkan tampilan menjadi subranges berdasarkan pemisah. Pemisah dapat menjadi elemen tunggal atau tampilan elemen. Pemisah bukan bagian dari yang dihasilkan split_view.

Tampilan terkait adalah lazy_split_view kelas . Perbedaan utama antara split_view dan lazy_split_view adalah:

Tampilkan Dapat memisahkan const rentang jenis rentang
split_view no forward_range Mendukung atau lebih tinggi.
lazy_split_view yes input_range Mendukung atau lebih tinggi.

Lebih suka split_view karena lebih efisien kecuali Anda harus membagi rentang yaitu const.

Sintaks

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

Parameter template

Pattern
Jenis tampilan yang menentukan urutan pemisah.

V
Jenis tampilan yang mendasar.

Melihat karakteristik

Untuk deskripsi entri berikut, lihat Menampilkan karakteristik kelas

Karakteristik Deskripsi
Adaptor rentang views::split
Rentang yang mendasar Sama seperti rentang yang mendasar
Jenis elemen range_reference_t<V>
Lihat kategori iterator Memenuhi forward_range
Ukuran No
Apakah const-iterable No
Rentang umum Hanya jika rentang yang mendasar memenuhi common_range
Rentang yang dipinjam No

Anggota

Fungsi anggota Keterangan
Konstruktor Buat tampilan.
baseC++20 Dapatkan rentang yang mendasar.
beginC++20 Dapatkan iterator ke elemen pertama.
endC++20 Dapatkan sentinel di akhir tampilan.
Diwariskan dari view_interface Keterangan
emptyC++20 Uji apakah tampilan kosong.
frontC++20 Dapatkan elemen pertama.
operator boolC++20 Uji apakah tampilan tidak kosong.

Persyaratan

Header: <ranges> (sejak C++20)

kumpulan nama XML: std::ranges

Opsi Pengkompilasi: /std:c++20 atau yang lebih baru diperlukan.

Konstruktor

Membuat instans 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);

Parameter

e
Elemen tunggal yang mengidentifikasi tempat untuk memisahkan tampilan. Elemen ini bukan bagian dari tampilan yang dihasilkan.

base
Tampilan yang mendasar.

pattern
Tampilan elemen yang mengidentifikasi tempat untuk memisahkan tampilan. Tampilan elemen bukan bagian dari tampilan yang dihasilkan.

rg
Rentang untuk dipisahkan.

Untuk informasi tentang jenis parameter templat, lihat Parameter templat.

Nilai hasil

split_view Instans yang berisi satu atau beberapa subrang.

Keterangan

Cara terbaik untuk membuat adalah split_view dengan menggunakan views::split adaptor rentang. Adaptor rentang adalah cara yang dimaksudkan untuk membuat kelas tampilan. Jenis tampilan hanya diekspos jika Anda ingin membuat jenis tampilan kustom Anda sendiri.

1) Buat split_view yang dibuat secara default. Tampilan yang mendasar dan pattern dibuat secara default. base()mengembalikan salinan .V()
2) Buat split_view dengan memisahkan tampilan menggunakan urutan pemisah.
3) Buat split_view dengan memisahkan tampilan menggunakan pemisah tunggal.

Contoh 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

Mendapatkan salinan tampilan yang mendasar.

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

Parameter

Tidak ada.

Mengembalikan

Tampilan yang mendasar.

begin

Dapatkan iterator ke elemen pertama dalam tampilan.

constexpr auto begin();

Parameter

Tidak ada.

Nilai hasil

Iterator yang menunjuk pada elemen pertama dalam tampilan.

Gambar vektor dengan elemen 10, 20, dan 30. Elemen pertama berisi 10 dan diberi label begin(). Elemen terakhir berisi 30 dan diberi label 'elemen terakhir'. Kotak imajiner setelah elemen terakhir menunjukkan sentinel dan diberi label end().

end

Dapatkan sentinel di akhir tampilan.

constexpr auto end();

Parameter

Tidak ada.

Nilai hasil

Sentinel yang mengikuti elemen terakhir dalam tampilan:

Gambar vektor dengan elemen 10, 20, dan 30. Elemen pertama berisi 10 dan diberi label begin(). Elemen terakhir berisi 30 dan diberi label 'elemen terakhir'. Kotak imajiner setelah elemen terakhir menunjukkan sentinel dan diberi label end().

Lihat juga

<ranges>
split_view adaptor rentang
lazy_split_view class
lihat kelas