Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tampilan yang memfilter elemen rentang yang tidak cocok dengan predikat.
Sintaks
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>>;
Parameter template
V
Jenis rentang yang mendasar.
Pred
Jenis predikat yang menentukan elemen mana yang akan disimpan.
Melihat karakteristik
Untuk deskripsi entri berikut, lihat Menampilkan karakteristik kelas
| Karakteristik | Deskripsi |
|---|---|
| Adaptor rentang | views::filter |
| Rentang yang mendasar | Harus memuaskan input_range atau lebih tinggi |
| Jenis elemen | Sama seperti rentang yang mendasar |
| Lihat kategori iterator | input_range, forward_range, atau bidirectional_range tergantung pada rentang yang mendasar |
| Ukuran | No |
Apakah const-iterable |
No |
| Rentang umum | Hanya jika rentang yang mendasar memenuhi common_range |
| Rentang yang dipinjam | Hanya jika rentang yang mendasar memenuhi borrowed_range |
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 dihilangkan. |
| Diwarisi dari view_interface | Keterangan |
backC++20 |
Dapatkan elemen terakhir. |
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 filter_view
1) constexpr filter_view(V base, P pred);
2) filter_view() requires default_initializable<V> && default_initializable<Pred> = default;
Parameter
base
Tampilan yang mendasar.
pred
Predikat yang menentukan elemen mana yang akan disimpan dari tampilan yang mendasarinya.
Untuk informasi tentang jenis parameter templat, lihat Parameter templat.
Nilai hasil
Instans filter_view.
Keterangan
Cara terbaik untuk membuat adalah filter_view dengan menggunakan views::filter 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) Buat nilai yang diinisialisasi filter_view. Predikat dan tampilan yang mendasarinya harus dapat diinisialisasi secara default.
2) Memindahkan membangun filter_view dari base tampilan dan pred predikat. Keduanya base dan pred dipindahkan melalui std::move().
Contoh: 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
Mendapatkan rentang yang mendasar.
// 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() &&;
Parameter
Tidak ada.
Mengembalikan
Tampilan yang mendasar.
begin
Dapatkan iterator ke elemen pertama dalam tampilan.
constexpr auto begin();
Nilai hasil
Iterator yang menunjuk pada elemen pertama dalam tampilan. Perilaku tidak terdefinisi jika tampilan tidak memiliki predikat.
end
Dapatkan sentinel di akhir tampilan.
constexpr auto end()
Nilai hasil
Sentinel yang mengikuti elemen terakhir dalam tampilan:
pred
Dapatkan referensi ke predikat yang menentukan elemen terkemuka mana yang akan dihilangkan.
constexpr const Pred& pred() const;
Nilai hasil
Referensi ke predikat.
Keterangan
Jika kelas tidak menyimpan predikat, perilaku tersebut tidak ditentukan.
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::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)
}
Lihat juga
<ranges>
filter adaptor rentang
drop_while()
take_while()
lihat kelas