std::ranges::concat_view<Views...>:iterator
Von cppreference.com
< cpp | ranges | concat view
template< bool Const > class /*iterator*/ |
(1) | (nur Exposition*) |
| Hilfskonzepte |
||
template< bool Const, class... Rs > concept /*concat-is-random-access*/ = /* siehe Beschreibung */; |
(2) | (nur Exposition*) |
template< bool Const, class... Rs > concept /*concat-is-bidirectional*/ = /* siehe Beschreibung */; |
(3) | (nur Exposition*) |
1) ranges::concat_view<Views...>::
iterator ist der Typ der Iteratoren, die von begin() und end() von ranges::concat_view<Views...> zurückgegeben werden.2) Sei
Fs die Packung, die aus allen Elementen von Rs außer dem letzten Element besteht. Äquivalent zutemplate<bool Const, class... Rs>
concept concat-is-random-access = // exposition only
all-random-access <Const, Rs...> &&
(ranges::common_range<maybe-const <Const, Fs>> && ...);
3) Sei
Fs die Packung, die aus allen Elementen von Rs außer dem letzten Element besteht. Äquivalent zutemplate<bool Const, class... Rs>
concept concat-is-bidirectional = // exposition only
all-bidirectional <Const, Rs...> &&
(ranges::common_range<maybe-const <Const, Fs>> && ...);
Inhalt |
[edit] Template-Parameter
| Const | - | ob der Iterator ein konstanter Iterator ist |
[edit] Verschachtelte Typen
Nur-Exposition-Typen | |
| Typ | Definition |
base-iter |
std::variant<ranges::iterator_t<maybe-const <Const, Views>>...>((nur zur Veranschaulichung)*) |
Iterator-Eigenschaftstypen | |
| Typ | Definition |
iterator_concept
|
ein Iterator-Tag, siehe unten |
iterator_category(bedingt vorhanden) |
ein Iterator-Tag, siehe unten |
value_type
|
concat-value-t <maybe-const <Const, Views>...> |
difference_type
|
std::common_type_t<ranges::range_difference_t< |
[edit] Bestimmung des Iterator-Konzepts
iterator_concept ist wie folgt definiert
- Wenn
concat-is-random-access<Const, Views...> modelliert wird, bezeichnetiterator_conceptstd::random_access_iterator_tag. - Andernfalls, wenn
concat-is-bidirectional<Const, Views...> modelliert wird, bezeichnetiterator_conceptstd::bidirectional_iterator_tag. - Andernfalls, wenn
all-forward<Const, Views...> modelliert wird, bezeichnetiterator_conceptstd::forward_iterator_tag. - Andernfalls bezeichnet
iterator_conceptstd::input_iterator_tag.
[edit] Bestimmung der Iterator-Kategorie
iterator_category ist definiert, wenn und nur wenn all-forward <Const, Views...> modelliert wird. In diesem Fall ist sie wie folgt definiert:
- Wenn std::is_reference_v<
concat-reference-t<maybe-const<Const, Views>...>> false ist, bezeichnetiterator_categorystd::input_iterator_tag. - Andernfalls, sei
Csdie Packung von Typen std::iterator_traits<ranges::iterator_t<maybe-const<Const, Views>>>::iterator_category...- Wenn (std::derived_from<Cs, std::random_access_iterator_tag> && ...) &&
concat-is-random-access<Const, Views...> wahr ist, bezeichnetiterator_categorystd::random_access_iterator_tag. - Andernfalls, wenn (std::derived_from<Cs, std::bidirectional_iterator_tag> && ...) &&
concat-is-bidirectional<Const, Views...> wahr ist, bezeichnetiterator_categorystd::bidirectional_iterator_tag. - Andernfalls, wenn (std::derived_from<Cs, std::forward_iterator_tag> && ...) wahr ist, bezeichnet
iterator_categorystd::forward_iterator_tag. - Andernfalls bezeichnet
iterator_categorystd::input_iterator_tag.
- Wenn (std::derived_from<Cs, std::random_access_iterator_tag> && ...) &&
[edit] Datenmember
| Mitglied | Definition |
maybe-const <Const, ranges::concat_view>* parent_ |
ein Zeiger auf die übergeordnete concat_view((exposition-only member object*) |
base-iter it_ |
ein Iterator in der aktuellen Ansicht ((exposition-only member object*) |
[edit] Member-Funktionen
| Konstruiert einen Iterator (öffentliche Memberfunktion) | |
| greift auf das Element zu (öffentliche Memberfunktion) | |
| greift per Index auf ein Element zu (öffentliche Memberfunktion) | |
| bewegt den zugrundeliegenden Iterator vorwärts oder rückwärts (public member function) | |
Exposition-only-Funktionale Templates | |
ersetzt it_ durch den Anfang der nächsten Ansicht, wenn it_ das Ende der aktuellen Ansicht ist(exposition-only Member-Funktion*) | |
dekrementiert it_, sodass er auf die vorherige Position zeigt(exposition-only Member-Funktion*) | |
| schiebt die aktuelle Position um den gegebenen Offset vorwärts (exposition-only Member-Funktion*) | |
| dekrementiert die aktuelle Position um den gegebenen Wert (exposition-only Member-Funktion*) | |
[edit] Nicht-Member-Funktionen
| vergleicht die zugrundeliegenden Iteratoren (Funktion) | |
| (C++26) |
führt Iterator-Arithmetik durch (Funktion) |
| (C++26) |
castet das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen rvalue-Referenztyp (Funktion) |
| (C++26) |
tauscht die Objekte, auf die zwei zugrundeliegende Iteratoren zeigen (Funktion) |
[edit] Beispiel
Die vorläufige Version kann auf Compiler Explorer eingesehen werden.
Führen Sie diesen Code aus
#include <iostream> #include <iterator> #include <ranges> int main() { namespace views = std::views; static constexpr int p[]{1, 2, 3}; static constexpr auto e = {4, 5}; auto t = views::iota(6, 9); auto cat = views::concat(p, e, t); auto dog = views::concat(cat, cat); for (auto i{dog.begin()}; i != std::default_sentinel; ++i) std::cout << *i << ' '; std::cout << '\n'; }
Ausgabe
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
[edit] Referenzen
- C++26 Standard (ISO/IEC 14882:2026)
- 26.7.18.3 Klassenvorlage
concat_view::iterator[range.concat.iterator]
- 26.7.18.3 Klassenvorlage