std::ranges::views::iota, std::ranges::iota_view
| Definiert in der Header-Datei <ranges> |
||
| template< std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t > |
(1) | (seit C++20) |
| namespace views { inline constexpr /* unspecified */ iota = /* unspecified */; |
(2) | (seit C++20) |
| Aufruf-Signatur |
||
| template< class W > requires /* siehe unten */ |
(seit C++20) | |
| template< class W, class Bound > requires /* siehe unten */ |
(seit C++20) | |
Inhalt |
Customization Point Objects
Der Name views::iota bezeichnet ein Customization Point Object, welches ein const Function Object eines literalen semiregular-Klassentyps ist. Zu Aus exposiçãozwecken wird die cv-unqualified-Version seines Typs als __iota_fn bezeichnet.
Alle Instanzen von __iota_fn sind gleich. Die Effekte des Aufrufs verschiedener Instanzen des Typs __iota_fn mit denselben Argumenten sind äquivalent, unabhängig davon, ob der die Instanz bezeichnende Ausdruck ein lvalue oder ein rvalue ist, und ob er const-qualifiziert ist oder nicht (jedoch ist eine volatile-qualifizierte Instanz nicht zwingend aufrufbar). Somit kann views::iota frei kopiert werden und seine Kopien können austauschbar verwendet werden.
Gegeben eine Menge von Typen Args..., wenn std::declval<Args>()... die Anforderungen für Argumente an views::iota oben erfüllen, dann modelliert __iota_fn
- std::invocable<__iota_fn, Args...>,
- std::invocable<const __iota_fn, Args...>,
- std::invocable<__iota_fn&, Args...>, und
- std::invocable<const __iota_fn&, Args...>.
Andernfalls nimmt kein Funktionsaufrufoperator von __iota_fn an der Überladungsauflösung teil.
[bearbeiten] Datenmember
| Mitglied | Definition |
W value_ |
Der Anfangswert ((exposition-only member object*) |
Bound bound_ |
Der Sentinel-Wert, kann unerreichbar sein ((exposition-only member object*) |
[bearbeiten] Member-Funktionen
Erzeugt eine iota_view(öffentliche Memberfunktion) | |
Ermittelt den Anfangs-Iterator einer iota_view(öffentliche Memberfunktion) | |
Ermittelt den Sentinel, der das Ende einer iota_view kennzeichnet(öffentliche Memberfunktion) | |
Prüft, ob die iota_view leer ist (d.h. ob Iterator und Sentinel gleich verglichen werden)(öffentliche Memberfunktion) | |
| (optional) |
Ermittelt die Größe einer iota_view (nur bereitgestellt, wenn sie begrenzt ist)(öffentliche Memberfunktion) |
Geerbt von std::ranges::view_interface | |
| (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
| der Iterator-Typ ((nur zur Veranschaulichung)*) | |
Der Sentinel-Typ, der verwendet wird, wenn die iota_view begrenzt ist und Bound und W nicht denselben Typ haben((nur zur Veranschaulichung)*) |
[bearbeiten] Hilfs-Templates
| template< std::weakly_incrementable W, std::semiregular Bound > constexpr bool ranges::enable_borrowed_range<ranges::iota_view<W, Bound>> = true; |
(seit C++20) | |
Diese Spezialisierung von ranges::enable_borrowed_range lässt iota_view borrowed_range erfüllen.
[bearbeiten] Beispiel
#include <algorithm> #include <iostream> #include <ranges> struct Bound { int bound; bool operator==(int x) const { return x == bound; } }; int main() { for (int i : std::ranges::iota_view{1, 10}) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, 10)) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1, Bound{10})) std::cout << i << ' '; std::cout << '\n'; for (int i : std::views::iota(1) | std::views::take(9)) std::cout << i << ' '; std::cout << '\n'; std::ranges::for_each(std::views::iota(1, 10), [](int i){ std::cout << i << ' '; }); std::cout << '\n'; }
Ausgabe
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
[bearbeiten] 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 4096 | C++20 | views::iota könnte eine iota_view as-is kopieren |
verbieten |
| P2325R3 | C++20 | iota_view erforderte, dass W semiregular istda view default_initializable erfordert |
erfordert nur, dass W copyable ist |
[bearbeiten] Siehe auch
| (C++11) |
füllt einen Bereich mit sukzessiven Inkrementen des Startwerts (Funktionstemplate) |
| (C++23) |
füllt einen Bereich mit sukzessiven Inkrementen des Startwerts (Funktionsobjekt für Algorithmen) |
ein view, der eine Sequenz aus der wiederholten Erzeugung desselben Werts besteht(Klassen-Template) (Customization Point Objekt) |