std::ranges::views::slide, std::ranges::slide_view
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::forward_range V > requires ranges::view<V> |
(1) | (seit C++23) |
| namespace views { inline constexpr /* unspecified */ slide = /* unspecified */; |
(2) | (seit C++23) |
| Aufruf-Signatur |
||
| template< ranges::viewable_range R > constexpr ranges::view auto slide( R&& r, ranges::range_difference_t<R> n ); |
(seit C++23) | |
| template< class DifferenceType > constexpr /* range adaptor object */ slide( DifferenceType&& n ); |
(seit C++23) | |
| Hilfskonzepte |
||
template< class V > concept /*slide-caches-nothing*/ = |
(3) | (nur Exposition*) |
template< class V > concept /*slide-caches-last*/ = |
(4) | (nur Exposition*) |
template< class V > concept /*slide-caches-first*/ = |
(5) | (nur Exposition*) |
slide_view ist ein Bereichsadaptor, der einen view und eine Zahl n entgegennimmt und eine Ansicht erzeugt, deren mtes Element (ein "Fenster") eine Ansicht über die m-te bis (m + n - 1)-te Elemente der ursprünglichen Ansicht ist.- s - n + 1, wenn s >= n,
- 0 andernfalls, und die resultierende View ist leer.
Wenn n nicht größer als 0 ist, ist das Verhalten undefiniert.
slide_view modelliert immer forward_range und modelliert bidirectional_range, random_access_range oder sized_range, wenn die adaptierte view-Typ das entsprechende Konzept modelliert.
Inhalt |
[edit] Datenmitglieder
| Mitglied | Beschreibung |
V base_ (private) |
die zugrunde liegende Ansicht ((exposition-only member object*) |
ranges::range_difference_t<V> n_ (private) |
die "Fenstergröße" ((exposition-only member object*) |
non-propagating-cache<ranges::iterator_t<V>> cached_begin_ (private)(vorhanden nur, wenn V das slide-caches-first-Konzept modelliert)
|
ein Objekt, das das Ergebnis von begin() zwischenspeichert((exposition-only member object*) |
non-propagating-cache<ranges::iterator_t<V>> cached_end_ (private)(vorhanden nur, wenn V das slide-caches-last-Konzept modelliert)
|
ein Objekt, das das Ergebnis von end() zwischenspeichert((exposition-only member object*) |
[edit] Memberfunktionen
konstruiert eine slide_view(öffentliche Member-Funktion) | |
| gibt einen Iterator zum Anfang zurück (öffentliche Member-Funktion) | |
| gibt einen Iterator oder Sentinel zum Ende zurück (öffentliche Member-Funktion) | |
gibt die Anzahl der Elemente zurück, nur bereitgestellt, wenn die zugrunde liegende (adaptierte) Range sized_range erfüllt(öffentliche Member-Funktion) | |
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>) | |
[edit] Deduktionsleitfäden
[edit] Verschachtelte Klassen
| (C++23) |
der Iterator-Typ ((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*) |
| (C++23) |
der Sentinel-Typ, der verwendet wird, wenn slide_view kein common_range ist((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*) |
[edit] Hilfsschablonen
| template< class V > constexpr bool ranges::enable_borrowed_range<slide_view<V>> = |
(seit C++23) | |
Diese Spezialisierung von ranges::enable_borrowed_range lässt slide_view borrowed_range erfüllen, wenn die zugrundeliegende Ansicht dies tut.
[edit] Anmerkungen
Es gibt Ähnlichkeiten zwischen ranges::adjacent_view und ranges::slide_view
- Beide erzeugen ein "gleitendes Fenster" der Größe
N. - Beide haben die gleiche Größe
S - N + 1, wobeiSdie Größe einer adaptiertenviewist, so dassS >= N > 0.
Die folgende Tabelle zeigt die Unterschiede zwischen diesen Adaptoren
| View-Adaptor | value_type |
Die Fenstergröße N |
|---|---|---|
| ranges::adjacent_view | std::tuple | Ein Schablonenparameter |
| ranges::slide_view | ranges::range | Ein Laufzeitargument |
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_slide |
202202L |
(C++23) | std::ranges::slide_view
|
[edit] Beispiel
#include <algorithm> #include <iostream> #include <ranges> auto print_subrange = [](std::ranges::viewable_range auto&& r) { std::cout << '['; for (char space[]{0,0}; auto elem : r) std::cout << space << elem, *space = ' '; std::cout << "] "; }; int main() { const auto v = {1, 2, 3, 4, 5, 6}; std::cout << "All sliding windows of width:\n"; for (const unsigned width : std::views::iota(1U, 1U + v.size())) { auto const windows = v | std::views::slide(width); std::cout << "W = " << width << ": "; std::ranges::for_each(windows, print_subrange); std::cout << '\n'; } }
Ausgabe
All sliding windows of width W: W = 1: [1] [2] [3] [4] [5] [6] W = 2: [1 2] [2 3] [3 4] [4 5] [5 6] W = 3: [1 2 3] [2 3 4] [3 4 5] [4 5 6] W = 4: [1 2 3 4] [2 3 4 5] [3 4 5 6] W = 5: [1 2 3 4 5] [2 3 4 5 6] W = 6: [1 2 3 4 5 6]
[edit] Referenzen
- C++23 Standard (ISO/IEC 14882:2024)
- 26.7.29 Slide view [range.slide]
[edit] Siehe auch
ein view, der aus Tupeln von Referenzen auf benachbarte Elemente des adaptierten Views besteht(Klassen-Template) (Range-Adaptor-Objekt) | |
eine Reihe von views, die N-elementige, nicht überlappende, aufeinanderfolgende Blöcke von Elementen einer anderen view sind(Klassenschablone) (Range-Adaptor-Objekt) |