std::ranges::views::stride, std::ranges::stride_view
Von cppreference.com
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::input_range V > requires ranges::view<V> |
(1) | (seit C++23) |
| namespace views { inline constexpr /* nicht spezifiziert */ stride = /* nicht spezifiziert */; |
(2) | (seit C++23) |
| Aufruf-Signatur |
||
| template< ranges::viewable_range R > constexpr ranges::view auto stride( R&& r, ranges::range_difference_t<R> n ); |
(seit C++23) | |
| template< class DifferenceType > constexpr /*Range-Adaptor-Closure*/ stride( DifferenceType&& n ); |
(seit C++23) | |
| Hilfsschablonen |
||
1)
stride_view ist ein Range-Adaptor, der eine view und eine Zahl n nimmt und eine View erzeugt, die aus Elementen der ursprünglichen View besteht, indem sie in Schritten von n Elementen vorrückt. Das bedeutet, dass das m-te Element der erzeugten View das (n * i)-te Element der ursprünglichen View ist, für einen nicht-negativen Index i. Die Elemente der ursprünglichen View, deren „Index“ kein Vielfaches von n ist, sind nicht in der erzeugten View vorhanden. Sei
S die Größe der ursprünglichen View. Dann ist die Größe der erzeugten View- (S / n) + (S % n ? 1 : 0), wenn S >= n; andernfalls,
- 1, wenn S > 0; andernfalls,
- 0, und die resultierende View ist leer.
2) Der Name views::stride bezeichnet ein RangeAdaptorObject. Gegeben die Teilausdrücke e und n, ist der Ausdruck views::stride(e, n) ausdrucksäquivalent zu stride_view(e, n).
Das
n muss größer als 0 sein, andernfalls ist das Verhalten undefiniert.stride_view modelliert immer input_range und modelliert forward_range, bidirectional_range, random_access_range und/oder sized_range, wenn die adaptierte view vom Typ V das entsprechende Konzept modelliert. stride_view<V> modelliert common_range, wann immer die zugrundeliegende View V dies tut.
Inhalt |
[bearbeiten] Datenmember
| Mitglied | Beschreibung |
V base_ (private) |
die zugrunde liegende Ansicht ((exposition-only member object*) |
ranges::range_difference_t<V> stride_ (private) |
das Schrittweiten-Objekt (die „stride“) ((exposition-only member object*) |
[bearbeiten] Memberfunktionen
konstruiert eine stride_view(öffentliche Member-Funktion) | |
| (C++23) |
gibt den gespeicherten Schrittweitenwert zurück (öffentliche Memberfunktion) |
| gibt eine Kopie der zugrunde liegenden (angepassten) View zurück (public member function) | |
| 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>) | |
[bearbeiten] Deduction Guides
[bearbeiten] Verschachtelte Klassen
| (C++23) |
der Iterator-Typ ((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*) |
[bearbeiten] Hilfstemplates
| template< class V > constexpr bool ranges::enable_borrowed_range<stride_view<V>> = |
(seit C++23) | |
Diese Spezialisierung von ranges::enable_borrowed_range bewirkt, dass stride_view borrowed_range erfüllt, wenn die zugrundeliegende View dies tut.
[bearbeiten] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_stride |
202207L |
(C++23) | std::ranges::stride_view
|
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <algorithm> #include <iostream> #include <ranges> #include <string_view> using namespace std::literals; void print(std::ranges::viewable_range auto&& v, std::string_view separator = " ") { for (auto const& x : v) std::cout << x << separator; std::cout << '\n'; } int main() { print(std::views::iota(1, 13) | std::views::stride(3)); print(std::views::iota(1, 13) | std::views::stride(3) | std::views::reverse); print(std::views::iota(1, 13) | std::views::reverse | std::views::stride(3)); print("0x0!133713337*x//42/A$@"sv | std::views::stride(0B11) | std::views::transform([](char O) -> char { return 0100 | O; }), ""); }
Ausgabe
1 4 7 10 10 7 4 1 12 9 6 3 password
[bearbeiten] Referenzen
- C++23 Standard (ISO/IEC 14882:2024)
- 26.7.31 Stride view [range.stride]
[bearbeiten] Siehe auch
eine view, deren M-tes Element eine view über die M-ten bis (M + N - 1)-ten Elemente einer anderen view ist(Klassenschablone) (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) | |
ein view, der aus Tupeln von Referenzen auf benachbarte Elemente des adaptierten Views besteht(Klassen-Template) (Range-Adaptor-Objekt) | |
ein view, der aus den Elementen eines range besteht, die ein Prädikat erfüllen(Klassen-Template) (Range-Adaptor-Objekt) |