Namensräume
Varianten
Aktionen

std::ranges::views::adjacent, std::ranges::adjacent_view, std::ranges::views::pairwise

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
adjacent_viewviews::adjacent
(C++23)(C++23)
views::pairwise
(C++23)

 
 
Definiert in der Header-Datei <ranges>
template< ranges::forward_range V, std::size_t N >

    requires ranges::view<V> && (N > 0)
class adjacent_view

    : public ranges::view_interface<adjacent_view<V, N>>
(1) (seit C++23)
namespace views {

    template< std::size_t N >
    constexpr /* nicht spezifiziert */ adjacent = /* nicht spezifiziert */ ;

}
(2) (seit C++23)
namespace views {

    inline constexpr auto pairwise = adjacent<2>;

}
(3) (seit C++23)
Aufruf-Signatur
template< ranges::viewable_range R >

    requires /* siehe unten */

constexpr ranges::view auto adjacent<N>( R&& r );
(seit C++23)
1) adjacent_view ist ein Range-Adaptor, der eine view entgegennimmt und eine view erzeugt, deren i-tes Element (ein "Fenster") ein std::tuple ist, das N Referenzen auf die Elemente der ursprünglichen View enthält, vom i-ten bis zum i + N - 1-ten Element, einschließlich.
Sei S die Größe der ursprünglichen View. Dann ist die Größe der erzeugten View
  • S - N + 1, wenn S >= N,
  • 0 andernfalls, und die resultierende View ist leer.
2) Der Name views::adjacent<N> bezeichnet ein RangeAdaptorObject. Gegeben einen Teilausdruck e und einen konstanten Ausdruck N, ist der Ausdruck views::adjacent<N>(e) ausdrucksäquivalent zu
3) Der Name views::pairwise bezeichnet ein RangeAdaptorObject, das sich exakt wie views::adjacent<2> verhält.

adjacent_view modelliert immer forward_range und modelliert bidirectional_range, random_access_range oder sized_range, wenn die adaptierte view den entsprechenden Begriff modelliert.

Inhalt

[edit] Datenmitglieder

Member-Name Definition
base_ (privat) die zugrunde liegende view vom Typ V.
((exposition-only member object*)

[edit] Member-Funktionen

konstruiert eine adjacent_view
(öffentliche Member-Funktion) [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]

[edit] Ableitungsleitfäden

(keine)

[edit] Verschachtelte Klassen

der Iterator-Typ
((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*)
der Sentinel-Typ, der verwendet wird, wenn adjacent_view keine common_range ist
((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*)

[edit] Hilfsschablonen

template< class V, size_t N >

constexpr bool ranges::enable_borrowed_range<adjacent_view<V, N>> =

    ranges::enable_borrowed_range<V>;
(seit C++23)

Diese Spezialisierung von ranges::enable_borrowed_range bewirkt, dass adjacent_view borrowed_range erfüllt, wenn die zugrunde liegende View dies tut.

[edit] Hinweise

views::adjacent akzeptiert nur Forward Ranges, auch wenn N gleich 0 ist.

Es gibt Ähnlichkeiten zwischen ranges::adjacent_view und ranges::slide_view

  • Beide erzeugen ein "gleitendes Fenster" der Größe N.
  • Beide haben die gleiche Größe S - N + 1, wobei S die Größe einer adaptierten view ist, so dass S >= N > 0.

Die folgende Tabelle zeigt die Unterschiede zwischen diesen Adaptoren

View-Adaptor value_type Die Fenstergröße N
ranges::adjacent_view std::tuple Ein Schablonenparameter
ranges::slide_view ranges::range Ein Laufzeitargument
Feature-Test-Makro Wert Std Feature
__cpp_lib_ranges_zip 202110L (C++23) ranges::zip_view,
ranges::zip_transform_view,
ranges::adjacent_view,
ranges::adjacent_transform_view

[edit] Beispiel

#include <array>
#include <format>
#include <iostream>
#include <ranges>
#include <tuple>
 
int main()
{
    constexpr std::array v{1, 2, 3, 4, 5, 6};
    std::cout << "v = [1 2 3 4 5 6]\n";
 
    for (int i{}; std::tuple t : v | std::views::adjacent<3>)
    {
        auto [t0, t1, t2] = t;
        std::cout << std::format("e = {:<{}}[{} {} {}]\n", "", 2 * i++, t0, t1, t2);
    }
}

Ausgabe

v = [1 2 3 4 5 6]
e = [1 2 3]
e =   [2 3 4]
e =     [3 4 5]
e =       [4 5 6]

[edit] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 4098 C++23 views::adjacent<0> akzeptierte früher nur Eingabe-Ranges als abgelehnt markiert

[edit] Referenzen

  • C++23 Standard (ISO/IEC 14882:2024)
  • 26.7.25 Adjacent view [range.adjacent]

[edit] Siehe auch

ein view, der aus den Ergebnissen der Anwendung einer Transformationsfunktion auf benachbarte Elemente des adaptierten Views besteht
(Klassen-Template) (Range-Adaptor-Objekt)[edit]
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]
eine view, die aus Elementen einer anderen view besteht und dabei jeweils N Elemente überspringt
(Klassenschablone) (Range-Adaptor-Objekt)[bearbeiten]