std::ranges::views::reverse, std::ranges::reverse_view
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::view V > erfordert ranges::bidirectional_range<V> |
(1) | (seit C++20) |
| namespace views { inline constexpr /* nicht spezifiziert */ reverse = /* nicht spezifiziert */; |
(2) | (seit C++20) |
| Aufruf-Signatur |
||
| template< ranges::viewable_range R > requires /* siehe unten */ |
(seit C++20) | |
view in umgekehrter Reihenfolge darstellt.- e.base(), wenn der Typ von
eeine (möglicherweise cv-qualifizierte) Spezialisierung vonreverse_viewist; - andernfalls, wenn der Typ von e ein (möglicherweise cv-qualifizierter) ranges::subrange<std::reverse_iterator<I>, std::reverse_iterator<I>, K> für einen Iterator-Typ
Iund einen WertKvom Typranges::subrange_kindist.
- ranges::subrange<I, I, K>(e.end().base(), e.begin().base(), e.size()), wenn
Kranges::subrange_kind::sizedist; - andernfalls ranges::subrange<I, I, K>(e.end().base(), e.begin().base());
- ranges::subrange<I, I, K>(e.end().base(), e.begin().base(), e.size()), wenn
- andernfalls ranges::reverse_view{e}.
views::reverse entpackt umgekehrte Ansichten, wenn möglich.Eine reverse_view modelliert immer bidirectional_range und common_range und modelliert borrowed_range, sized_range oder random_access_range, wenn der zugrundeliegende Ansichtstyp V das entsprechende Konzept modelliert.
Inhalt |
[bearbeiten] Datenmember
| Mitglied | Beschreibung |
V base_ (privat) |
die zugrunde liegende Ansicht ((exposition-only member object*) |
non-propagating-cache<ranges::iterator_t<V>> cached_end_ (private)(vorhanden nur, wenn V common_range nicht erfüllt)
|
ein Objekt, das das Ergebnis von Aufrufen von begin() zwischenspeichert((exposition-only member object*) |
[bearbeiten] Member-Funktionen
konstruiert eine reverse_view(öffentliche Memberfunktion) | |
gibt die zugrunde liegende Ansicht V zurück(öffentliche Memberfunktion) | |
gibt den Anfangs-Iterator der reverse_view zurück(öffentliche Memberfunktion) | |
gibt den End-Iterator der reverse_view zurück(öffentliche Memberfunktion) | |
| gibt die Größe der Ansicht zurück, wenn sie beschränkt ist (öffentliche Memberfunktion) | |
Geerbt von std::ranges::view_interface | |
gibt zurück, ob die abgeleitete Ansicht leer ist, bereitgestellt nur, wenn sie sized_range oder forward_range erfüllt(public member function of std::ranges::view_interface<D>) | |
| (C++23) |
gibt einen konstanten Iterator zum Anfang des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| (C++23) |
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur, wenn ranges::empty darauf anwendbar ist (public member function of std::ranges::view_interface<D>) | |
gibt das erste Element in der abgeleiteten View zurück, bereitgestellt, wenn sie forward_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
gibt das letzte Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie bidirectional_range und common_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
gibt das n-te Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie random_access_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
std::ranges::reverse_view::reverse_view
| reverse_view() erfordert std::default_initializable<V> = default; |
(1) | (seit C++20) |
| constexpr reverse_view( V r ); |
(2) | (seit C++20) |
base_ wertmäßig über seinen Standard-Member-Initialisierer (= V()).base_ mit std::move(r).Parameter
| r | - | Bereich zum Umkehren |
std::ranges::reverse_view::base
| constexpr V base() const& erfordert std::copy_constructible<V>; |
(1) | (seit C++20) |
| constexpr V base() &&; |
(2) | (seit C++20) |
Gibt die zugrunde liegende Ansicht zurück.
std::ranges::reverse_view::begin
| constexpr std::reverse_iterator<ranges::iterator_t<V>> begin(); |
(1) | (seit C++20) |
| constexpr std::reverse_iterator<ranges::iterator_t<V>> begin() erfordert ranges::common_range<V>; |
(2) | (seit C++20) |
| constexpr auto begin() const erfordert ranges::common_range<const V>; |
(3) | (seit C++20) |
range-Konzept gefordert wird, speichert diese Funktion das Ergebnis im Cache-Objekt für spätere Aufrufe.
std::ranges::reverse_view::end
| constexpr std::reverse_iterator<ranges::iterator_t<V>> end(); |
(1) | (seit C++20) |
| constexpr auto end() const erfordert ranges::common_range<const V>; |
(2) | (seit C++20) |
Äquivalent zu return std::make_reverse_iterator(ranges::begin(base_));.
std::ranges::reverse_view::size
| constexpr auto size() requires ranges::sized_range<V>; |
(1) | (seit C++20) |
| constexpr auto size() const requires ranges::sized_range<const V>; |
(2) | (seit C++20) |
Gibt die Größe der Ansicht zurück, wenn die Ansicht beschränkt ist.
[bearbeiten] Deduktionshilfen
| template< class R > reverse_view( R&& ) -> reverse_view<views::all_t<R>>; |
(seit C++20) | |
[bearbeiten] Hilfsschablonen
| template< class T > constexpr bool enable_borrowed_range<std::ranges::reverse_view<T>> = |
(seit C++20) | |
Diese Spezialisierung von std::ranges::enable_borrowed_range lässt reverse_view borrowed_range erfüllen, wenn die zugrundeliegende Ansicht dies erfüllt.
[bearbeiten] Beispiel
#include <iostream> #include <ranges> int main() { static constexpr auto il = {3, 1, 4, 1, 5, 9}; std::ranges::reverse_view rv{il}; for (int i : rv) std::cout << i << ' '; std::cout << '\n'; for (int i : il | std::views::reverse) std::cout << i << ' '; std::cout << '\n'; // operator[] is inherited from std::view_interface for (auto i{0U}; i != rv.size(); ++i) std::cout << rv[i] << ' '; std::cout << '\n'; }
Ausgabe
9 5 1 4 1 3 9 5 1 4 1 3 9 5 1 4 1 3
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3494 | C++20 | reverse_view war nie ein borrowed_range |
sie ist eine borrowed_range, wenn ihre zugrundeliegende View es ist |
[bearbeiten] Siehe auch
| Iterator-Adapter für die Rückwärtsiteration (Klassenvorlage) | |
| (C++20) |
Kehrt die Reihenfolge der Elemente in einem Bereich um (Algorithmus-Funktionsobjekt) |
| (C++20) |
Erstellt eine Kopie eines Bereichs, der umgekehrt ist (Algorithmus-Funktionsobjekt) |