Namespaces
Variants

std::ranges:: views:: stride, std::ranges:: stride_view

From cppreference.net
Ranges library
Range adaptors
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
1) 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.
Sei 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.
2) Der Name views :: stride bezeichnet ein RangeAdaptorObject . Für die Subausdrücke e und n ist der Ausdruck views :: stride ( e, n ) ausdrucksäquivalent zu stride_view ( e, n ) .
Der Wert 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)
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 >> =

ranges:: enable_borrowed_range < 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

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)
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)