Freigeben über


iota_view Klasse (C++-Standardbibliothek)

Generiert eine Ansicht einer Abfolge von Elementen, indem ein Anfangswert wiederholt erhöht wird. Die Sequenz kann gebunden oder ungebunden sein.

Syntax

template<std::weakly_incrementable W, std::semiregular Bound = std::unreachable_sentinel_t>
    requires __WeaklyEqualityComparableWith<W, Bound> && std::copyable<W>
class iota_view : public ranges::view_interface<iota_view<W, Bound>>;

Vorlagenparameter

W
Der Typ der Werte in der Sequenz. Der angegebene Typ muss unterstützt werden operator++.

Bound
Der Typ des Endwerts. Wenn Bound dies der Standardwert ist std::unreachable_sentinel_t , ist die Ansicht ungebunden.

Eigenschaften der Ansicht

Eine Beschreibung der folgenden Einträge finden Sie unter Anzeigen von Klassenmerkmalen

Merkmal Beschreibung
Range Adaptor views::iota
Zugrunde liegender Bereich Nicht anwendbar, da diese Ansicht ihre Member generiert
Elementtyp Identisch mit dem Vorlagenparameter W
Iteratorkategorie anzeigen Unterstützt input_range bis zu random_access_range, je nach Typ von W
Größer eingestellt Nur wenn der Bereich einen Endwert aufweist, d. h., es handelt sich nicht um eine unendliche Datenreihe
Ist const-iterierbar Ja
Allgemeiner Bereich Nur wenn Bound derselbe Typ wie W
Geliehener Bereich Ja

Member

Memberfunktionen Beschreibung
Konstruktoren C++20 Erstellen Sie die Ansicht.
beginC++20 Rufen Sie einen Iterator zum ersten Element ab.
endC++20 Rufen Sie den Sentinel am Ende der Ansicht ab.
sizeC++20 Ruft die Anzahl der Elemente ab.
Geerbt von view_interface Beschreibung
backC++20 Rufen Sie das letzte Element ab.
emptyC++20 Testen Sie, ob die Ansicht leer ist.
frontC++20 Rufen Sie das erste Element ab.
operator[]C++20 Rufen Sie das Element an der angegebenen Position ab.
operator boolC++20 Testen Sie, ob die Ansicht nicht leer ist.

Hinweise

Eine gute Möglichkeit zum Erstellen eines Steuerelements iota_view ist die Verwendung des iota Bereichsadapters. Bereichsadapter sind die beabsichtigte Möglichkeit zum Erstellen von Ansichtsklassen. Die Ansichtstypen werden für den Fall verfügbar gemacht, dass Sie ihren eigenen benutzerdefinierten Ansichtstyp erstellen möchten.

Die Abfolge von Werten kann integrale Werte sein, z. B. 1,2,3 oder "a", "b", "c" oder aufeinander folgende Elemente aus einem Bereich.

Diese Ansicht wird in der Regel verwendet, um eine Reihe von Werten zu durchlaufen. Zum Beispiel:

for (int i : iota_view{1, 10}) // iterate over a view of the integers 1 through 9
{
    std::cout << i << ’ ’; // 1 2 3 4 5 6 7 8 9
}

Anforderungen

Header: <ranges> (seit C++20)

Namespace:std::ranges

Compileroption: /std:c++20 oder höher ist erforderlich.

Konstruktoren

Erstellen einer Instanz einer iota_view.

1) iota_view() requires std::default_initializable<W> = default;
2) constexpr explicit iota_view(W value);
3) constexpr iota_view(std::type_identity_t<W> value, std::type_identity_t<Bound> bound);
4) constexpr iota_view( /*iterator*/ first, /*sentinel*/ last );

Parameter

value
Der Startwert für die Datenreihe.

bound
Die Grenze der Datenreihe. Es ist ein Wert größer als der letzte Wert in der Datenreihe.

Informationen zum Vorlagenparametertyp finden Sie unter Vorlagenparameter.

Hinweise

1) Erstellen Sie einen iota_view mit einem Anfangs- und Endwert, der durch den standardmäßig initialisierten Vorlagentyp Wbestimmt wird.
2) Erstellen Sie einen iota_view mit dem angegebenen Anfangs- und Endwert, der durch den wert initialisierten Typ Wbestimmt wird.
3) Erstellen Sie eine Begrenzung iota_view mit dem angegebenen Anfangs- und Endwert. Der Endwert ist ein Wert kleiner als der letzte angegebene Wert.
4) Wird zum Erstellen von Unteransichten verwendet. Beispiel: std::ranges::iota_view(start, end); Wo start und end sind Iteratoren am Anfang und Ende der Unteransicht.

Anstatt diese Klasse direkt zu erstellen, ist eine einfache Möglichkeit, eine iota_view Klasse zu erstellen, indem Sie den iota Bereichsadapter verwenden. Bereichsadapter sind die beabsichtigte Möglichkeit zum Erstellen von Ansichtsklassen. Die Ansichtstypen werden für den Fall verfügbar gemacht, dass Sie ihren eigenen benutzerdefinierten Ansichtstyp erstellen möchten.

Wenn der Typ der Gebundene ist, wird unreachable_sentinel_tdie resultierende Ansicht gebunden.

Wenn Sie einen der Konstruktoren verwenden, deren Wert die Grenze initialisiert, ist die Bindung der Standardwert für diesen Typ. Ist z. B. ein leerer Bereich, iota_view<int, int>{} da int der standardmäßig konstruierte Int-Wert und die Bindung beides 0sind. Dies liegt -4, -3, -2, -1 auch daran, iota_view<int, int>{-4} dass die standardmäßig konstruierte int Grenze .0

iota_view Konstruktorbeispiel

// requires /std:c++20, or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::ranges::iota_view<int> iv; // create an iota_view with an unbounded range, starting at 0 
    std::ranges::iota_view<int> iv2(5); // create an iota_view with an unbounded range, starting at 5.
    std::ranges::iota_view<int, int> iv3{5, 10}; // create an iota_view with a bounded range, starting at 5 and ending at 9
    
    std::vector<int> v{10, 20, 35, 45, 50, 66, 77, 82, 90, 100};
    auto start = std::ranges::find(v, 35);
    auto end = std::ranges::find(v, 82);
    for (auto &&val : std::ranges::iota_view(start, end))
    {
        std::cout << *val << ' '; // outputs 35 45 50 66 77
    }
}

begin

Rufen Sie einen Iterator zum ersten Element in der Ansicht ab.

constexpr auto begin();
constexpr auto begin() const requires range<const V>;

Parameter

Keine

Rückgabewert

Ein Iterator, der auf das erste Element in der Ansicht zeigt.

end

Rufen Sie das End sentinel am Ende der Ansicht ab.

constexpr auto end();
constexpr auto end() const requires ranges::range<const V>;

Parameter

Keine

Rückgabewert

Wenn der iota_view Wert ungebunden ist, wird zurückgegeben std::unreachable_sentinel.

Wenn die iota_view Grenze besteht, wird ein Iterator zurückgegeben, der auf den Sentinel über den letzten Wert in der Sequenz zeigt.

size

Ruft die Anzahl der Elemente in der Ansicht ab. Der iota_view Wert muss gebunden sein.

constexpr auto size() requires
    (same_as<W, Bound> && advanceable <W>) ||
    (integral<W> && integral<Bound>) ||
    sized_sentinel_for<Bound, W>;

Parameter

Keine

Rückgabewert

Die Anzahl der Elemente im iota_view.

Hinweise

Sie können keine ungebundenen iota_viewAnrufe tätigensize().

Weitere Informationen

<ranges>
iota() Range Adaptor
std::numerics::iota
Anzeigen von Klassen