Bagikan melalui


view_interface kelas (Pustaka Standar C++)

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