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. |
begin C++20 |
Rufen Sie einen Iterator zum ersten Element ab. |
end C++20 |
Rufen Sie den Sentinel am Ende der Ansicht ab. |
size C++20 |
Ruft die Anzahl der Elemente ab. |
Geerbt von view_interface |
Beschreibung |
back C++20 |
Rufen Sie das letzte Element ab. |
empty C++20 |
Testen Sie, ob die Ansicht leer ist. |
front C++20 |
Rufen Sie das erste Element ab. |
operator[] C++20 |
Rufen Sie das Element an der angegebenen Position ab. |
operator bool C++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 W
bestimmt wird.
2) Erstellen Sie einen iota_view
mit dem angegebenen Anfangs- und Endwert, der durch den wert initialisierten Typ W
bestimmt 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_t
die 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 0
sind. 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_view
Anrufe tätigensize()
.
Siehe auch
<ranges>
iota()
Range Adaptor
std::numerics::iota
Anzeigen von Klassen