view_interface
class (Standardowa biblioteka C++)
Klasa bazowa dla klas widoków w std::ranges
przestrzeni nazw. Ta klasa implementuje niektóre interfejsy dla typów widoków pochodnych. Użyj tego jako klasy bazowej dla własnych typów widoków, aby zmniejszyć standardowy element, który należy zapisać.
Składnia
template<class Derived>
requires std::is_class_v<Derived> &&
std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;
Parametry szablonu
Derived
Typ klasy pochodnej z tej klasy bazowej.
Elementy członkowskie
Funkcje składowe | Opis |
---|---|
back C++20 |
Pobierz ostatni element w widoku pochodnym. |
data C++20 |
Pobierz wskaźnik do pierwszego elementu w widoku pochodnym. |
empty C++20 |
Sprawdź, czy widok pochodny jest pusty. |
front C++20 |
Pobierz pierwszy element w widoku pochodnym. |
size C++20 |
Pobierz liczbę elementów w widoku pochodnym. |
Operatory | Opis |
operator[] C++20 |
Pobierz element na określonej pozycji. |
operator bool C++20 |
Sprawdź, czy widok pochodny nie jest pusty. |
Wymagania
Nagłówek: <ranges>
(od C++20)
Przestrzeń nazw: std::ranges
Opcja kompilatora: /std:c++20
lub nowsza jest wymagana.
back
Pobierz ostatni element w widoku pochodnym.
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>;
Parametry
Brak.
Wartość zwracana
Ostatni element w widoku pochodnym.
Uwagi
Widok pochodny musi spełniać bidirectional_range
wymagania i common_range
.
Zachowanie elementu back()
i front()
jest niezdefiniowane dla dowolnego pustego widoku.
data
Pobierz wskaźnik do pierwszego elementu w widoku pochodnym.
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>>;
Parametry
Brak.
Wartość zwracana
Wskaźnik do pierwszego elementu w widoku pochodnym.
Uwagi
Iterator widoku pochodnego musi spełniać wartość contiguous_iterator
.
empty
Sprawdź, czy widok pochodny jest pusty.
1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;
Parametry
Brak.
Wartość zwracana
Zwraca wartość true
, jeśli widok pochodny nie ma żadnych elementów. W przeciwnym razie zwraca wartość false
.
Uwagi
Widok pochodny musi spełniać wartość std::ranges::forward_range
.
front
Pobierz pierwszy element w widoku pochodnym.
constexpr auto front()
requires ranges::forward_range<Derived>;
constexpr auto front() const
requires ranges::forward_range<const Derived>;
Parametry
Brak.
Wartość zwracana
Ostatni element w widoku pochodnym.
Uwagi
Widok pochodny musi spełniać wartość forward_range
.
Zachowanie elementu front()
jest niezdefiniowane dla elementu std::ranges::empty_view
.
size
Pobierz liczbę elementów w widoku pochodnym.
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>>;
Parametry
Brak.
Wartość zwracana
Liczba elementów w widoku pochodnym.
Uwagi
Iterator widoku pochodnego musi spełniać wartość sized_sentinel_for
.
operator[]
Pobierz element na określonej pozycji.
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;
Parametry
pos
Pozycja względem iteratora początkowego elementu do zwrócenia.
Wartość zwracana
Element na określonej pozycji względem iteratora początkowego.
Uwagi
Widok pochodny musi spełniać wartość random_access_range
.
Zachowanie tego operatora jest niezdefiniowane dla elementu std::ranges::empty_view
.
Przykład: 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
Sprawdź, czy widok pochodny nie jest pusty.
explicit constexpr operator bool();
explicit constexpr operator bool() const;
Parametry
Brak.
Wartość zwracana
Zwraca wartość false
, jeśli widok pochodny nie ma żadnych elementów (widok jest pusty). W przeciwnym razie zwraca wartość true
(widok nie jest pusty).
Uwagi
Iterator widoku pochodnego musi spełniać wartość std::ranges::forward_iterator
.
Ten operator jest odpowiednikiem !empty()
. Ułatwia to pisanie if (someRange) {...}
w celu przetestowania, czy istnieje coś w zakresie do działania.
Zachowanie tego operatora jest niezdefiniowane dla elementu std::ranges::empty_view
.
Przykład: 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
Zobacz też
<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Klasy widoków