Namespaces
Variants

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

Von de.cppreference.net
 
 
Bereichsbibliothek
Bereichsadaptoren
 
 
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 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.
Sei S die Größe der ursprünglichen Ansicht. Dann ist die Größe der erzeugten Ansicht:
  • (S / n) + (S % n ? 1 : 0), wenn S >= n; andernfalls,
  • 1, wenn S > 0; andernfalls,
  • 0, und die resultierende Ansicht ist leer.
2) Der Name 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).
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 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)
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 >> =

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)