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
backC++20 Rufen Sie das letzte Element in der abgeleiteten Ansicht ab.
dataC++20 Rufen Sie einen Zeiger auf das erste Element in der abgeleiteten Ansicht ab.
emptyC++20 Testen Sie, ob die abgeleitete Ansicht leer ist.
frontC++20 Rufen Sie das erste Element in der abgeleiteten Ansicht ab.
sizeC++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 boolC++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 falsezurü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