Namensräume
Varianten
Aktionen

std::ranges::views::elements, std::ranges::elements_view

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <ranges>
template< ranges::input_range V, std::size_t N >

    requires ranges::view<V> &&
             /*hat-tuple-element*/<ranges::range_value_t<V>, N> &&
             /*hat-tuple-element*/<std::remove_reference_t<
                                       ranges::range_reference_t<V>>, N> &&
             /*returnable-element*/<ranges::range_reference_t<V>, N>
class elements_view

    : public ranges::view_interface<elements_view<V, N>>;
(1) (seit C++20)
namespace views {

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

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

    requires /* siehe unten */

constexpr ranges::view auto elements<N>( R&& r );
(seit C++20)
Hilfskonzepte
(3)
template< class T, std::size_t N >

concept /*hat-tuple-element*/ =
    requires(T t) {
        typename std::tuple_size<T>::type;
        requires N < std::tuple_size_v<T>;
        typename std::tuple_element_t<N, T>;
        { std::get<N>(t) } -> std::convertible_to<
                                  const std::tuple_element_t<N, T>&>;

    };
(bis C++23)
(nur Exposition*)
template< class T, std::size_t N >

concept /*hat-tuple-element*/ =

    /*tuple-ähnlich*/<T> && N < std::tuple_size_v<T>
(seit C++23)
(nur Exposition*)
template< class T, std::size_t N >

concept returnable-element =
     std::is_reference_v<T> || std::move_constructible<

                                       std::tuple_element_t<N, T>>;
(4) (nur Exposition*)
1) Nimmt eine view von tuple-ähnlichen Werten und gibt eine View mit dem Werttyp des N-ten Elements des adaptierten View-Werttyps aus.
2) Jede Spezialisierung von views::elements ist ein RangeAdaptorObject. Der Ausdruck views::elements<M>(e) ist ausdrucksäquivalent zu elements_view<views::all_t<decltype((e))>, M>{e} für jeden geeigneten Unterausdruck e und jede Konstante M.
3) Stellt sicher, dass die Elemente des zugrunde liegenden Views tuple-ähnliche Werte sind, siehe tuple-like(seit C++23).
4) Stellt sicher, dass keine veralteten Referenzen zurückgegeben werden.

elements_view modelliert die Konzepte random_access_range, bidirectional_range, forward_range, input_range, common_range und sized_range, wenn der zugrunde liegende View V die entsprechenden Konzepte modelliert.

Inhalt

[bearbeiten] Datenmember

Member-Name Definition
base_ (privat) der zugrunde liegende (adaptierte) View vom Typ V
((exposition-only member object*)

[bearbeiten] Memberfunktionen

konstruiert eine elements_view
(öffentliche Member-Funktion) [edit]
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] Verschachtelte Klassen

der Iterator-Typ
((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*)
der Sentinel-Typ
((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*)

[bearbeiten] Hilfstemplates

template<class T, std::size_t N>

constexpr bool enable_borrowed_range<std::ranges::elements_view<T, N>> =

    ranges::enable_borrowed_range<T>;
(seit C++20)

Diese Spezialisierung von ranges::enable_borrowed_range lässt elements_view borrowed_range erfüllen, wenn der zugrunde liegende View dies tut.

[bearbeiten] Beispiel

#include <iostream>
#include <ranges>
#include <string>
#include <tuple>
#include <vector>
 
int main()
{
    const std::vector<std::tuple<int, char, std::string>> vt
    {
        {1, 'A', "α"},
        {2, 'B', "β"},
        {3, 'C', "γ"},
        {4, 'D', "δ"},
        {5, 'E', "ε"},
    };
 
    for (int const e : std::views::elements<0>(vt))
        std::cout << e << ' ';
    std::cout << '\n';
 
    for (char const e : vt | std::views::elements<1>)
        std::cout << e << ' ';
    std::cout << '\n';
 
    for (std::string const& e : std::views::elements<2>(vt))
        std::cout << e << ' ';
    std::cout << '\n';
}

Ausgabe

1 2 3 4 5
A B C D E
α β γ δ ε

[bearbeiten] Defect Reports

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 3494 C++20 elements_view war nie ein borrowed_range es ist ein borrowed_range
wenn sein zugrunde liegender View es ist
LWG 3502 C++20 dangling reference konnte von elements_view bezogen werden eine solche Verwendung ist verboten

[bearbeiten] Siehe auch

nimmt einen view von Paar-ähnlichen Werten und erzeugt einen view der ersten Elemente jedes Paares
(Klassen-Template) (Range-Adaptor-Objekt)[edit]
nimmt einen view von Paar-ähnlichen Werten und erzeugt einen view der zweiten Elemente jedes Paares
(Klassen-Template) (Range-Adaptor-Objekt)[edit]
ein view, der aus Tupeln von Referenzen auf entsprechende Elemente der adaptierten Views besteht
(Klassen-Template) (Customization Point Objekt)[edit]
ein view, der aus den Ergebnissen der Anwendung einer Transformationsfunktion auf entsprechende Elemente der adaptierten Views besteht
(Klassen-Template) (Customization Point Objekt)[edit]
BLAS-ähnlicher Slice eines Valarrays: Startindex, Länge, Schrittweite
(class) [edit]