Namensräume
Varianten
Aktionen

std::ranges::views::iota, std::ranges::iota_view

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <ranges>
template< std::weakly_incrementable W,

          std::semiregular Bound = std::unreachable_sentinel_t >
    requires /*weakly-equality-comparable-with*/<W, Bound> && std::copyable<W>
class iota_view

    : public ranges::view_interface<iota_view<W, Bound>>
(1) (seit C++20)
namespace views {

    inline constexpr /* unspecified */ iota = /* unspecified */;

}
(2) (seit C++20)
Aufruf-Signatur
template< class W >

    requires /* siehe unten */

constexpr /* siehe unten */ iota( W&& value );
(seit C++20)
template< class W, class Bound >

    requires /* siehe unten */

constexpr /* siehe unten */ iota( W&& value, Bound&& bound );
(seit C++20)
1) Ein Range-Factory, die eine Folge von Elementen durch wiederholtes Inkrementieren eines Anfangswerts erzeugt. Kann entweder begrenzt oder unbegrenzt (unendlich) sein.
2) views::iota(e) und views::iota(e, f) sind ausdrucksäquivalent zu iota_view<std::decay_t<decltype((e))>>(e) und iota_view(e, f) bzw. für alle geeigneten Teil-Ausdrücke e und f.

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

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>) [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] 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 ist
da 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) [bearbeiten]
füllt einen Bereich mit sukzessiven Inkrementen des Startwerts
(Funktionsobjekt für Algorithmen)[bearbeiten]
ein view, der eine Sequenz aus der wiederholten Erzeugung desselben Werts besteht
(Klassen-Template) (Customization Point Objekt)[edit]