std::ranges::views::elements, std::ranges::elements_view
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::input_range V, std::size_t N > requires ranges::view<V> && |
(1) | (seit C++20) |
| namespace views { template< std::size_t N > |
(2) | (seit C++20) |
| Aufruf-Signatur |
||
| template< ranges::viewable_range R > requires /* siehe unten */ |
(seit C++20) | |
| Hilfskonzepte |
||
| (3) | ||
template< class T, std::size_t N > concept /*hat-tuple-element*/ = |
(bis C++23) (nur Exposition*) |
|
| template< class T, std::size_t N > concept /*hat-tuple-element*/ = |
(seit C++23) (nur Exposition*) |
|
| template< class T, std::size_t N > concept returnable-element = |
(4) | (nur Exposition*) |
view von tuple-ähnlichen Werten und gibt eine View mit dem Werttyp des N-ten Elements des adaptierten View-Werttyps aus.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.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) | |
| gibt eine Kopie der zugrunde liegenden (angepassten) View zurück (public member function) | |
| gibt einen Iterator zum Anfang zurück (öffentliche Member-Funktion) | |
| gibt einen Iterator oder Sentinel zum Ende zurück (öffentliche Member-Funktion) | |
gibt die Anzahl der Elemente zurück, nur bereitgestellt, wenn die zugrunde liegende (adaptierte) Range sized_range erfüllt(öffentliche Member-Funktion) | |
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>) | |
| (C++23) |
gibt einen konstanten Iterator zum Anfang des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| (C++23) |
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| 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>) | |
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>) | |
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>) | |
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>) | |
[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>> = |
(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_rangewenn 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
| (C++20) |
nimmt einen view von Paar-ähnlichen Werten und erzeugt einen view der ersten Elemente jedes Paares(Klassen-Template) (Range-Adaptor-Objekt) |
nimmt einen view von Paar-ähnlichen Werten und erzeugt einen view der zweiten Elemente jedes Paares(Klassen-Template) (Range-Adaptor-Objekt) | |
| (C++23) |
ein view, der aus Tupeln von Referenzen auf entsprechende Elemente der adaptierten Views besteht(Klassen-Template) (Customization Point Objekt) |
ein view, der aus den Ergebnissen der Anwendung einer Transformationsfunktion auf entsprechende Elemente der adaptierten Views besteht(Klassen-Template) (Customization Point Objekt) | |
| BLAS-ähnlicher Slice eines Valarrays: Startindex, Länge, Schrittweite (class) |