std::ranges:: views:: elements, std::ranges:: elements_view
|
Definiert in Header
<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) |
|
Aufrufsignatur
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* siehe unten */
|
(seit C++20) | |
|
Hilfskonzepte
|
||
| (3) | ||
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(bis C++23)
( Nur zur Darstellung* ) |
|
|
template
<
class
T,
std::
size_t
N
>
concept
/*has-tuple-element*/
=
|
(seit C++23)
( Nur zur Darstellung* ) |
|
|
template
<
class
T,
std::
size_t
N
>
Konzept returnable
-
Element
=
|
(4) | ( Nur zur Darstellung* ) |
view
von tuple-ähnlichen Werten und liefert eine View mit einem Werttyp des
N
ten
Elements des Werttyps der adaptierten View.
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 Teilausdruck
e
und Konstantenausdruck
M
.
elements_view
modelliert die Konzepte
random_access_range
,
bidirectional_range
,
forward_range
,
input_range
,
common_range
und
sized_range
, wenn die zugrundeliegende View
V
die jeweiligen Konzepte modelliert.
Inhaltsverzeichnis |
Datenmitglieder
| Mitglied | Beschreibung |
V
base_
|
die zugrundeliegende Ansicht
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
Memberfunktionen
konstruiert eine
elements_view
(öffentliche Elementfunktion) |
|
|
gibt eine Kopie der zugrunde liegenden (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 zugrunde liegende (adaptierte) Bereich
sized_range
erfüllt
(öffentliche Elementfunktion) |
|
|
(C++26)
|
gibt die ungefähre Größe des resultierenden
approximately_sized_range
zurück
(öffentliche Elementfunktion) |
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
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
|
(C++23)
|
gibt einen konstanten Iterator zum Anfang 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 Ansicht nicht leer ist, bereitgestellt nur wenn
ranges::empty
darauf anwendbar ist
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das erste Element in der abgeleiteten Ansicht zurück, bereitgestellt wenn sie
forward_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das letzte Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie
bidirectional_range
und
common_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
gibt das
n
te
Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie
random_access_range
erfüllt
(öffentliche Elementfunktion von
std::ranges::view_interface<D>
)
|
|
Geschachtelte Klassen
|
der Iteratortyp
( Nur zur Darstellung verwendete Member-Klassentemplate* ) |
|
|
der Sentineltyp
( Nur zur Darstellung verwendete Member-Klassentemplate* ) |
Hilfsvorlagen
|
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
bewirkt, dass
elements_view
borrowed_range
erfüllt, wenn die zugrundeliegende View diese Bedingung erfüllt.
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 α β γ δ ε
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 3494 | C++20 |
elements_view
war nie ein
borrowed_range
|
es ist ein
borrowed_range
wenn seine zugrunde liegende Ansicht es ist |
| LWG 3502 | C++20 |
Hängende Referenz konnte von
elements_view
erhalten werden
|
solche Verwendung ist verboten |
Siehe auch
|
(C++20)
|
nimmt eine
view
bestehend aus paarartigen Werten und erzeugt eine
view
der ersten Elemente jedes Paares
(Klassen-Template) (Range-Adapter-Objekt) |
nimmt eine
view
bestehend aus paarartigen Werten und erzeugt eine
view
der zweiten Elemente jedes Paares
(Klassen-Template) (Range-Adapter-Objekt) |
|
|
(C++23)
|
eine
view
bestehend aus Tupeln von Referenzen zu entsprechenden Elementen der adaptierten Views
(Klassen-Template) (Customization Point Object) |
eine
view
bestehend aus Ergebnissen der Anwendung einer Transformationsfunktion auf entsprechende Elemente der adaptierten Views
(Klassen-Template) (Customization Point Object) |
|
|
BLAS-ähnlicher Slice eines valarray: Startindex, Länge, Schrittweite
(Klasse) |