std::ranges::views::stride, std::ranges::stride_view
| Definiert in Header <ranges>
|
||
template< ranges::input_range V >
requires ranges::view<V>
class stride_view
: public ranges::view_interface<stride_view<V>>
|
(1) | (seit C++23) |
namespace views {
inline constexpr /* unspecified */ stride = /* unspecified */;
}
|
(2) | (seit C++23) |
| Aufrufsignatur |
||
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) | |
| Hilfsvorlagen |
||
stride_view ist ein Bereichsadaptor, der eine view und eine Zahl n nimmt und eine Ansicht erzeugt, die aus Elementen der ursprünglichen Ansicht besteht, indem n Elemente auf einmal übersprungen werden. Das bedeutet, dass jedes mte Element der erzeugten Ansicht das (n * i)te Element der ursprünglichen Ansicht ist, für einen nicht-negativen Index i.
Die Elemente der ursprünglichen Ansicht, deren „Index“ kein Vielfaches von n ist, sind in der erzeugten Ansicht nicht vorhanden.S die Größe der ursprünglichen Ansicht. Dann ist die Größe der erzeugten Ansicht:
(S / n) + (S % n ? 1 : 0), wennS >= n; andernfalls,1, wennS > 0; andernfalls,0, und die resultierende Ansicht ist leer.
views::stride bezeichnet ein RangeAdaptorObject. Gegeben seien die Teilausdrücke e und n, ist der Ausdruck views::stride(e, n) ausdrucksäquivalent zu stride_view(e, n).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 der angepasste view-Typ V das entsprechende Konzept modelliert.
stride_view<V> modelliert common_range immer dann, wenn die zugrundeliegende Ansicht V dies tut.
Datenmitglieder
| Member | Beschreibung |
V
base_
|
die zugrundeliegende Ansicht
( Nur-Darstellungs-Memberobjekt* ) |
ranges::
range_difference_t
<
V
>
stride_
|
das Größenobjekt (der "Stride")
( Nur-Darstellungs-Memberobjekt* ) |
Memberfunktionen
konstruiert einen
stride_view
(öffentliche Elementfunktion) |
|
|
(C++23)
|
gibt den gespeicherten Stride-Wert zurück
(öffentliche Elementfunktion) |
|
gibt eine Kopie der zugrundeliegenden (adaptierten) Ansicht zurück
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator oder Sentinel zum Ende zurück
(öffentliche Elementfunktion) |
|
gibt die Anzahl der Elemente zurück, bereitgestellt nur wenn der zugrundeliegende (adaptierte) Bereich
sized_range
erfüllt
(öffentliche Elementfunktion) |
|
|
(C++26)
|
gibt die ungefähre Größe des resultierenden
approximately_sized_range
zurück
(öffentliche Elementfunktion) |
Geerbt von ranges::view_interface | |
| gibt zurück, ob die abgeleitete Sicht leer ist, nur verfügbar, wenn sie sized_range oder forward_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
(C++23) |
gibt einen konstanten Iterator zum Beginn des Bereichs zurück (öffentliche Elementfunktion von std::ranges::view_interface<D>)
|
(C++23) |
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück (öffentliche Elementfunktion von std::ranges::view_interface<D>)
|
| gibt zurück, ob die abgeleitete Sicht nicht leer ist, nur verfügbar, wenn ranges::empty auf sie anwendbar ist (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
| gibt das erste Element in der abgeleiteten Sicht zurück, falls sie forward_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
| gibt das letzte Element in der abgeleiteten Sicht zurück, nur verfügbar, wenn sie bidirectional_range und common_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
gibt das nte Element in der abgeleiteten Sicht zurück, nur verfügbar, wenn sie random_access_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
Ableitungsleitfäden
Geschachtelte Klassen
|
(C++23)
|
Der Iteratortyp
( Nur zur Darstellung verwendete Memberklassenvorlage* ) |
Hilfsvorlagen
|
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 diese Bedingung erfüllt.
Hinweise
| Feature-Test Makro | Wert | Standard | Funktion |
|---|---|---|---|
__cpp_lib_ranges_stride
|
202207L
|
(C++23) |
std::ranges::stride_view
|
Beispiel
#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
Referenzen
- C++23-Standard (ISO/IEC 14882:2024):
-
- 26.7.31 Stride-Ansicht [range.stride]
Siehe auch
|
(C++23)
|
eine
view
deren M
tes
Element eine
view
über das M
te
bis (M + N - 1)
te
Element einer anderen
view
ist
(Klassentemplate) (Range-Adapter-Objekt) |
|
(C++23)
|
eine Range von
view
s
, die
N
-große, nicht überlappende aufeinanderfolgende Teile der Elemente einer anderen
view
sind
(Klassentemplate) (Range-Adapter-Objekt) |
eine
view
, die aus Tupeln von Referenzen auf benachbarte Elemente der adaptierten View besteht
(Klassentemplate) (Range-Adapter-Objekt) |
|
eine
view
, die aus den Elementen einer
range
besteht, die ein Prädikat erfüllen
(Klassentemplate) (Range-Adapter-Objekt) |