Bagikan melalui


take_while_view kelas (Pustaka Standar C++)

Tampilan yang berisi elemen terkemuka dari rentang yang cocok dengan predikat.

Sintaks

template<view V, class Pred> requires
  input_range<V> && is_object_v<Pred> &&
  indirect_unary_predicate<const Pred, iterator_t<V>>
class take_while_view : public view_interface<take_while_view<V, Pred>>;

Parameter template

Pred
Jenis predikat yang menentukan elemen terkemuka untuk dimasukkan ke dalam tampilan.

V
Jenis tampilan yang mendasar.

Melihat karakteristik

Untuk deskripsi entri berikut, lihat Menampilkan karakteristik kelas

Karakteristik Deskripsi
Adaptor rentang views::take_while
Rentang yang mendasar Harus memuaskan input_range atau lebih tinggi
Jenis elemen Sama seperti rentang yang mendasar
Lihat kategori iterator Sama seperti rentang yang mendasar
Ukuran No
Apakah const-iterable Hanya jika rentang yang mendasarinya dapat diulang const dan predikat dapat bekerja dengan const referensi.
Rentang umum No
Rentang yang dipinjam No

Anggota

Fungsi anggota Keterangan
KonstruktorC++20 Buat tampilan.
baseC++20 Dapatkan rentang yang mendasar.
beginC++20 Dapatkan iterator ke elemen pertama.
endC++20 Dapatkan sentinel di akhir tampilan.
predC++20 Dapatkan referensi ke predikat yang menentukan elemen mana yang akan diambil.
Diwariskan dari view_interface Keterangan
backC++20 Dapatkan elemen terakhir.
dataC++20 Dapatkan penunjuk ke elemen pertama.
emptyC++20 Uji apakah tampilan kosong.
frontC++20 Dapatkan elemen pertama.
operator[]C++20 Dapatkan elemen pada posisi yang ditentukan.
operator boolC++20 Uji apakah tampilan tidak kosong.
size Dapatkan jumlah elemen dalam tampilan.

Persyaratan

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

kumpulan nama XML: std::ranges

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

Konstruktor

Membuat instans take_while_view

1) take_while_view() requires 
    default_initializable<V> &&
    default_initializable<Pred> = default;

2) constexpr take_while_view(V base, Pred pred);

Parameter

base
Tampilan yang mendasar.

pred
Predikat yang menentukan elemen terkemuka untuk dimasukkan ke dalam tampilan.

Untuk informasi tentang jenis parameter templat, lihat Parameter templat.

Nilai hasil

Objek take_while_view.

Keterangan

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

1) Memindahkan membangun take_while_view dari base tampilan dan pred predikat. Keduanya base dan pred dipindahkan melalui std::move().
2) Membangun kosong take_while_view. Tampilan dan predikat yang mendasarinya dibuat secara default.

Contoh: take_while_view

// 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 twv = std::views::take_while(v, [](int i) {return i >= 0; });
    
    for (auto& e : twv)
    {
        std::cout << e << ' '; // 0 1 2 3
    }
    std::cout << '\n';

    // Using the '|' operator to create a take_view
    for (auto i : v | std::views::take_while([](int i) {return i < 5; }))
    {
        std::cout << i << ' '; // 0 1 2 3 -4
    }
}
0 1 2 3
0 1 2 3 -4

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

Salinan tampilan yang mendasar.

begin

Dapatkan iterator ke elemen pertama dalam tampilan.

1) constexpr auto begin() requires (!Simple_view<V>);
2) constexpr auto begin() const requires
        range<const V> && 
        indirect_unary_predicate<const Pred, iterator_t<const V>>

Parameter

Tidak ada.

Nilai hasil

Iterator yang menunjuk pada elemen pertama dalam tampilan. Perilaku tidak terdefinisi jika tampilan tidak memiliki predikat.

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().

Keterangan

Untuk 1, persyaratannya Simple_view berarti tampilan V dan const V memiliki jenis iterator dan sentinel yang sama.

end

Dapatkan sentinel di akhir tampilan.

1) constexpr auto end() requires (!Simple_view<V>);
2) constexpr auto end() const requires
        range<const V> &&
        indirect_unary_predicate<const Pred, iterator_t<const V>

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().

Keterangan

Untuk 1, persyaratannya Simple_view berarti tampilan V dan const V memiliki jenis iterator dan sentinel yang sama.

pred

Dapatkan referensi ke predikat yang digunakan untuk memilih elemen terkemuka mana yang akan masuk ke tampilan.

constexpr const Pred& pred() const;

Nilai hasil

Referensi ke predikat yang digunakan untuk memilih elemen terkemuka untuk dimasukkan ke dalam tampilan.

Contoh 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::take_while(
        [](int i) {return i < 5; });
    std::cout << std::boolalpha << mv.pred()(v[6]); // outputs false because v[6] = 6 and 6 is not less than 5 (the predicate)
}

Lihat juga

<ranges>
take_view
take_while adaptor rentang
lihat kelas