std::ranges:: views:: stride, std::ranges:: stride_view
|
Definiert in Header
<ranges>
|
||
|
template
<
ranges::
input_range
V
>
requires
ranges::
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 Range-Adapter, der eine
view
und eine Zahl
n
entgegennimmt und eine View erzeugt, die aus Elementen der ursprünglichen View besteht, indem jeweils um
n
Elemente vorangeschritten wird. Das bedeutet, dass jedes
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 in der erzeugten View nicht vorhanden.
S
die Größe der ursprünglichen Ansicht. Dann ist die Größe der erzeugten Ansicht:
- ( S / n ) + ( S % n ? 1 : 0 ) , falls S >= n ; andernfalls,
- 1 , falls S > 0 ; andernfalls,
- 0 , und die resultierende Ansicht ist leer.
n
muss größer als
0
sein, andernfalls ist das Verhalten undefiniert.
stride_view
modelliert stets
input_range
und modelliert
forward_range
,
bidirectional_range
,
random_access_range
und/oder
sized_range
, falls der adaptierte
view
-Typ
V
das entsprechende Konzept modelliert.
stride_view
<
V
>
modelliert
common_range
, sofern die zugrundeliegende View
V
dies tut.
Inhaltsverzeichnis |
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 std::ranges::view_interface |
|
gibt zurück, ob die abgeleitete Ansicht leer ist, bereitgestellt nur wenn sie
sized_range
oder
forward_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
|
(C++23)
|
gibt einen konstanten Iterator zum Anfang 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 Ansicht nicht leer ist, bereitgestellt nur wenn
ranges::empty
darauf anwendbar ist
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das erste Element in der abgeleiteten Ansicht zurück, bereitgestellt wenn sie
forward_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das letzte Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie
bidirectional_range
und
common_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das
n
-te
Element in der abgeleiteten Ansicht zurück, bereitgestellt nur 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) |