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.
Kelas dasar untuk kelas tampilan di std::ranges namespace layanan. Kelas ini mengimplementasikan beberapa antarmuka untuk jenis tampilan turunan. Gunakan ini sebagai kelas dasar untuk jenis tampilan Anda sendiri untuk mengurangi boilerplate yang perlu Anda tulis.
Sintaks
template<class Derived>
requires std::is_class_v<Derived> &&
std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;
Parameter template
Derived
Jenis kelas yang berasal dari kelas dasar ini.
Anggota
| Fungsi anggota | Keterangan |
|---|---|
backC++20 |
Dapatkan elemen terakhir dalam tampilan turunan. |
dataC++20 |
Dapatkan penunjuk ke elemen pertama dalam tampilan turunan. |
emptyC++20 |
Uji apakah tampilan turunan kosong. |
frontC++20 |
Dapatkan elemen pertama dalam tampilan turunan. |
sizeC++20 |
Dapatkan jumlah elemen dalam tampilan turunan. |
| Operator | Keterangan |
operator[]C++20 |
Dapatkan elemen pada posisi yang ditentukan. |
operator boolC++20 |
Uji apakah tampilan turunan tidak kosong. |
Persyaratan
Header: <ranges> (sejak C++20)
kumpulan nama XML: std::ranges
Opsi Pengkompilasi: /std:c++20 atau yang lebih baru diperlukan.
back
Dapatkan elemen terakhir dalam tampilan turunan.
constexpr auto back()
requires ranges::bidirectional_range<Derived> &&
ranges::common_range<Derived>;
constexpr auto back() const
requires ranges::bidirectional_range<const Derived> &&
ranges::common_range<const Derived>;
Parameter
Tidak ada.
Nilai hasil
Elemen terakhir dalam tampilan turunan.
Keterangan
Tampilan turunan harus memuaskan bidirectional_range dan common_range.
Perilaku back() dan front() tidak ditentukan untuk tampilan kosong apa pun.
data
Dapatkan penunjuk ke elemen pertama dalam tampilan turunan.
constexpr auto data()
requires std::contiguous_iterator<ranges::iterator_t<Derived>>;
constexpr auto data() const
requires ranges::range<const Derived> &&
std::contiguous_iterator<ranges::iterator_t<const Derived>>;
Parameter
Tidak ada.
Nilai hasil
Penunjuk ke elemen pertama dalam tampilan turunan.
Keterangan
Iterator untuk tampilan turunan harus memuaskan contiguous_iterator.
empty
Uji apakah tampilan turunan kosong.
1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;
Parameter
Tidak ada.
Nilai hasil
Mengembalikan true jika tampilan turunan tidak memiliki elemen. Jika tidak, kembalikan false.
Keterangan
Tampilan turunan harus memuaskan std::ranges::forward_range.
front
Dapatkan elemen pertama dalam tampilan turunan.
constexpr auto front()
requires ranges::forward_range<Derived>;
constexpr auto front() const
requires ranges::forward_range<const Derived>;
Parameter
Tidak ada.
Nilai hasil
Elemen terakhir dalam tampilan turunan.
Keterangan
Tampilan turunan harus memuaskan forward_range.
Perilaku front() tidak ditentukan untuk std::ranges::empty_view.
size
Dapatkan jumlah elemen dalam tampilan turunan.
constexpr auto size() requires ranges::forward_range<Derived> &&
std::sized_sentinel_for<ranges::sentinel_t<Derived>,
ranges::iterator_t<Derived>>;
constexpr auto size() const requires ranges::forward_range<const Derived> &&
std::sized_sentinel_for<ranges::sentinel_t<const Derived>,
ranges::iterator_t<const Derived>>;
Parameter
Tidak ada.
Nilai hasil
Jumlah elemen dalam tampilan turunan.
Keterangan
Iterator untuk tampilan turunan harus memuaskan sized_sentinel_for.
operator[]
Dapatkan elemen pada posisi yang ditentukan.
template<ranges::random_access_range R = Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);
template<ranges::random_access_range R = const Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;
Parameter
pos
Posisi, relatif terhadap iterator awal, dari elemen untuk kembali.
Nilai hasil
Elemen pada posisi yang ditentukan relatif terhadap iterator awal.
Keterangan
Tampilan turunan harus memuaskan random_access_range.
Perilaku operator ini tidak ditentukan untuk std::ranges::empty_view.
Contoh: operator[]
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{1, 2, 3, 4, 5};
std::ranges::drop_view dv = std::views::drop(v, 2);
for (auto e : dv)
{
std::cout << e << ' '; // 3 4 5
}
std::cout << "\ndv[1] = " << dv[1];
}
3 4 5
dv[1] = 4
view_interface::operator bool
Uji apakah tampilan turunan tidak kosong.
explicit constexpr operator bool();
explicit constexpr operator bool() const;
Parameter
Tidak ada.
Nilai hasil
Mengembalikan false jika tampilan turunan tidak memiliki elemen (tampilan kosong). Jika tidak, mengembalikan true (tampilan tidak kosong).
Keterangan
Iterator untuk tampilan turunan harus memuaskan std::ranges::forward_iterator.
Operator ini setara dengan !empty(). Ini membuatnya nyaman untuk menulis if (someRange) {...} untuk menguji apakah ada sesuatu dalam rentang yang akan dioperasikan.
Perilaku operator ini tidak ditentukan untuk std::ranges::empty_view.
Contoh: operator bool
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v{1, 2, 3, 4, 5};
std::ranges::filter_view fv = std::views::filter(v, [](int e) { return e > 3; });
bool isNotEmpty = static_cast<bool>(fv);
std::cout << "Has elements greater than 3: " << std::boolalpha << isNotEmpty << '\n' >>;
}
Has elements greater than 3: true
Lihat juga
<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Melihat kelas