Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <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 /* 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) [edit]
(C++23)
gibt den gespeicherten Schrittweitenwert zurück
(öffentliche Memberfunktion)
gibt eine Kopie der zugrunde liegenden (angepassten) View zurück
(public member function) [edit]
gibt einen Iterator zum Anfang zurück
(öffentliche Member-Funktion) [edit]
gibt einen Iterator oder Sentinel zum Ende zurück
(öffentliche Member-Funktion) [edit]
gibt die Anzahl der Elemente zurück, nur bereitgestellt, wenn die zugrunde liegende (adaptierte) Range sized_range erfüllt
(öffentliche Member-Funktion) [edit]
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>) [edit]
(C++23)
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(public member function of std::ranges::view_interface<D>) [edit]
(C++23)
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück
(public member function of std::ranges::view_interface<D>) [edit]
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>) [edit]
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>) [edit]
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>) [edit]
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>) [edit]

[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>> =

    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 dies tut.

[bearbeiten] Hinweise

Feature-Test-Makro Wert Std Feature
__cpp_lib_ranges_stride 202207L (C++23) std::ranges::stride_view

[bearbeiten] 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

[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)[bearbeiten]
eine Reihe von views, die N-elementige, nicht überlappende, aufeinanderfolgende Blöcke von Elementen einer anderen view sind
(Klassenschablone) (Range-Adaptor-Objekt)[bearbeiten]
ein view, der aus Tupeln von Referenzen auf benachbarte Elemente des adaptierten Views besteht
(Klassen-Template) (Range-Adaptor-Objekt)[edit]
ein view, der aus den Elementen eines range besteht, die ein Prädikat erfüllen
(Klassen-Template) (Range-Adaptor-Objekt)[edit]