std::ranges::views::enumerate, std::ranges::enumerate_view
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::view V > requires /*bereich-mit-bewegbaren-referenzen*/<V> |
(1) | (seit C++23) |
| namespace views { inline constexpr /* nicht spezifiziert */ enumerate = /* nicht spezifiziert */; |
(2) | (seit C++23) |
| Aufruf-Signatur |
||
| template< ranges::viewable_range R > requires /* siehe unten */ |
(seit C++23) | |
| Hilfskonzepte |
||
| template< class R > concept /*bereich-mit-bewegbaren-referenzen*/ = |
(3) | (nur Exposition*) |
enumerate_view ist ein Range-Adapter, der eine view annimmt und eine View von tuples erzeugt. Das i-te Element (das Tupel) der resultierenden Sequenz enthält- den Wert
i, der ein nullbasierter Index des Elements der zugrundeliegenden Sequenz ist, und - die Referenz auf das zugrundeliegende Element.
views::enumerate bezeichnet ein RangeAdaptorObject. Bei einem Unterausdruck e ist der Ausdruck views::enumerate(e) ausdrucksäquivalent zu enumerate_view<views::all_t<decltype((e))>>(e) für jeden geeigneten Unterausdruck e.enumerate_view modelliert die Konzepte random_access_range, bidirectional_range, forward_range, input_range, common_range und sized_range, wenn die zugrundeliegende View V die entsprechenden Konzepte modelliert.
Inhalt |
[bearbeiten] Datenmitglieder
| Member-Name | Definition |
base_ (privat) |
Ein Iterator zur zugrundeliegenden Sequenz vom Typ V.((exposition-only member object*) |
[bearbeiten] Member-Funktionen
konstruiert eine enumerate_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] Deduktionshilfen
[bearbeiten] Verschachtelte Klassen
| (C++23) |
der Iterator-Typ ((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*) |
| (C++23) |
der Sentinel-Typ ((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*) |
[bearbeiten] Hilfsschablonen
| template< class View > constexpr bool enable_borrowed_range<ranges::enumerate_view<View>> = |
(seit C++23) | |
Diese Spezialisierung von ranges::enable_borrowed_range sorgt dafür, dass enumerate_view borrowed_range erfüllt, wenn die zugrundeliegende View dies erfüllt.
[bearbeiten] Anmerkungen
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_enumerate |
202302L |
(C++23) | std::ranges::enumerate_view
|
[bearbeiten] Beispiel
#include <iostream> #include <map> #include <ranges> #include <vector> int main() { constexpr static auto v = {'A', 'B', 'C', 'D'}; for (auto const [index, letter] : std::views::enumerate(v)) std::cout << '(' << index << ':' << letter << ") "; std::cout << '\n'; #if __cpp_lib_ranges_to_container // create a map using the position of each element as key auto m = v | std::views::enumerate | std::ranges::to<std::map>(); for (auto const [key, value] : m) std::cout << '[' << key << "]:" << value << ' '; std::cout << '\n'; #endif std::vector<int> numbers{1, 3, 5, 7}; // num is mutable even with const, which does not propagate to reference to // make it const, use `std::views::enumerate(numbers) | std::views::as_const` // or `std::views::enumerate(std::as_const(numbers))` for (auto const [index, num] : std::views::enumerate(numbers)) { ++num; // the type is int& std::cout << numbers[index] << ' '; } std::cout << '\n'; }
Mögliche Ausgabe
(0:A) (1:B) (2:C) (3:D) [0]:A [1]:B [2]:C [3]:D 2 4 6 8
[bearbeiten] Referenzen
- C++23 Standard (ISO/IEC 14882:2024)
- 26.7.23 Enumerate view [range.enumerate]
[bearbeiten] Siehe auch
| (C++20) |
ein view, der eine Sequenz aus aufeinanderfolgenden Inkrementierungen eines Anfangswerts besteht(Klassen-Template) (Customization Point Objekt) |
| (C++23) |
ein view, der aus Tupeln von Referenzen auf entsprechende Elemente der adaptierten Views besteht(Klassen-Template) (Customization Point Objekt) |
nimmt einen view von tuple-ähnlichen Werten und eine Zahl N und erzeugt einen view des N-ten Elements jedes Tupels(Klassen-Template) (Range-Adaptor-Objekt) |