view_interface
Klasse (C++-Standardbibliothek)
Die Basisklasse für die Ansichtsklassen im std::ranges
Namespace. Diese Klasse implementiert einige der Schnittstellen für abgeleitete Ansichtstypen. Verwenden Sie dies als Basisklasse für Ihre eigenen Ansichtstypen, um den Zubaustein zu reduzieren, den Sie schreiben müssen.
Syntax
template<class Derived>
requires std::is_class_v<Derived> &&
std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;
Vorlagenparameter
Derived
Der Typ der Klasse, die von dieser Basisklasse abgeleitet wird.
Member
Memberfunktionen | Beschreibung |
---|---|
back C++20 |
Rufen Sie das letzte Element in der abgeleiteten Ansicht ab. |
data C++20 |
Rufen Sie einen Zeiger auf das erste Element in der abgeleiteten Ansicht ab. |
empty C++20 |
Testen Sie, ob die abgeleitete Ansicht leer ist. |
front C++20 |
Rufen Sie das erste Element in der abgeleiteten Ansicht ab. |
size C++20 |
Ruft die Anzahl der Elemente in der abgeleiteten Ansicht ab. |
Operatoren | Beschreibung |
operator[] C++20 |
Rufen Sie das Element an der angegebenen Position ab. |
operator bool C++20 |
Testen Sie, ob die abgeleitete Ansicht nicht leer ist. |
Anforderungen
Header: <ranges>
(seit C++20)
Namespace:std::ranges
Compileroption: /std:c++20
oder höher ist erforderlich.
back
Rufen Sie das letzte Element in der abgeleiteten Ansicht ab.
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
Keine
Rückgabewert
Das letzte Element in der abgeleiteten Ansicht.
Hinweise
Die abgeleitete Ansicht muss erfüllen bidirectional_range
und common_range
.
Das Verhalten und back()
front()
sind für jede leere Ansicht nicht definiert.
data
Rufen Sie einen Zeiger auf das erste Element in der abgeleiteten Ansicht ab.
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
Keine
Rückgabewert
Ein Zeiger auf das erste Element in der abgeleiteten Ansicht.
Hinweise
Der Iterator für die abgeleitete Ansicht muss erfüllen contiguous_iterator
.
empty
Testen Sie, ob die abgeleitete Ansicht leer ist.
1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;
Parameter
Keine
Rückgabewert
Gibt zurück true
, wenn die abgeleitete Ansicht keine Elemente enthält. Andernfalls wird false
zurückgegeben.
Hinweise
Die abgeleitete Ansicht muss erfüllt sein std::ranges::forward_range
.
front
Rufen Sie das erste Element in der abgeleiteten Ansicht ab.
constexpr auto front()
requires ranges::forward_range<Derived>;
constexpr auto front() const
requires ranges::forward_range<const Derived>;
Parameter
Keine
Rückgabewert
Das letzte Element in der abgeleiteten Ansicht.
Hinweise
Die abgeleitete Ansicht muss erfüllt sein forward_range
.
Das Verhalten von front()
ist nicht definiert für std::ranges::empty_view
.
size
Ruft die Anzahl der Elemente in der abgeleiteten Ansicht ab.
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
Keine
Rückgabewert
Die Anzahl der Elemente in der abgeleiteten Ansicht.
Hinweise
Der Iterator für die abgeleitete Ansicht muss erfüllen sized_sentinel_for
.
operator[]
Rufen Sie das Element an der angegebenen Position ab.
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
Die Position relativ zum Anfangs iterator des zurückzugebenden Elements.
Rückgabewert
Das Element an der angegebenen Position relativ zum Anfangs iterator.
Hinweise
Die abgeleitete Ansicht muss erfüllt sein random_access_range
.
Das Verhalten dieses Operators ist nicht definiert für std::ranges::empty_view
.
Beispiel: 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
Testen Sie, ob die abgeleitete Ansicht nicht leer ist.
explicit constexpr operator bool();
explicit constexpr operator bool() const;
Parameter
Keine
Rückgabewert
Gibt zurück false
, wenn die abgeleitete Ansicht keine Elemente enthält (die Ansicht ist leer). Andernfalls wird zurückgegeben true
(die Ansicht ist nicht leer).
Hinweise
Der Iterator für die abgeleitete Ansicht muss erfüllen std::ranges::forward_iterator
.
Dieser Operator entspricht !empty()
. Dies erleichtert das Schreiben if (someRange) {...}
, um zu testen, ob im Bereich etwas ausgeführt werden kann.
Das Verhalten dieses Operators ist nicht definiert für std::ranges::empty_view
.
Beispiel: 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
Siehe auch
<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Anzeigen von Klassen