std::ranges::join_with_view<V,Pattern>::iterator
template< bool Const > class /*iterator*/ |
(nur Exposition*) | |
ranges::join_with_view<V, Pattern>::iterator ist der Typ der Iteratoren, die von begin() und end() von ranges::join_with_view<V, Pattern> zurückgegeben werden.
Der Zustand eines Iterators dieser Klasse wird so verwaltet, als gäbe es zwei verschachtelte Iteratoren
- ein äußerer Iterator in den übergeordneten Bereich *
parent_
- Wenn
Baseforward_rangemodelliert, ist esouter_it_. - Andernfalls ist es
parent_->outer_it_.
- Wenn
- ein innerer Iterator
inner_it_in den Musterbereichparent_->pattern_oder in einen Unterbereich des übergeordneten Bereichs
Diese Iterator-Klasse hat die Invariante, dass der innere Iterator immer dereferenzierbar ist, es sei denn, der äußere Iterator ist nicht dereferenzierbar. Wenn ein Iterator konstruiert, inkrementiert oder dekrementiert wird, kann sein äußerer Iterator angepasst werden, um die Invariante zu wahren.
Inhalt |
[edit] Template-Parameter
| Const | - | ob der Iterator ein konstanter Iterator ist |
[edit] Verschachtelte Typen
Nur-Exposition-Typen | |
| Typ | Definition |
Parent |
maybe-const <Const, ranges::join_with_view<V, Pattern>>((nur zur Veranschaulichung)*) |
Base |
maybe-const <Const, V>((nur zur Veranschaulichung)*) |
InnerBase |
ranges::range_reference_t<Base >((nur zur Veranschaulichung)*) |
PatternBase |
maybe-const <Const, Pattern>((nur zur Veranschaulichung)*) |
OuterIter |
ranges::iterator_t<Base >((nur zur Veranschaulichung)*) |
InnerIter |
ranges::iterator_t<InnerBase >((nur zur Veranschaulichung)*) |
PatternIter |
ranges::iterator_t<PatternBase >((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
|
std::common_type_t<ranges::range_value_t< |
difference_type
|
std::common_type_t<ranges::range_difference_t< |
[edit] Bestimmung des Iterator-Konzepts
iterator_concept ist wie folgt definiert
- Wenn alle folgenden Bedingungen erfüllt sind, bezeichnet
iterator_conceptstd::bidirectional_iterator_tag- std::is_reference_v<
InnerBase> ist true. -
Basemodelliertbidirectional_range. -
InnerBaseundPatternBasemodellieren jeweilscommon_range.
- std::is_reference_v<
- Andernfalls, wenn alle folgenden Bedingungen erfüllt sind, bezeichnet
iterator_conceptstd::forward_iterator_tag- std::is_reference_v<
InnerBase> ist true. -
BaseundInnerBasemodellieren jeweilsforward_range.
- std::is_reference_v<
- Andernfalls bezeichnet
iterator_conceptstd::input_iterator_tag.
[edit] Bestimmung der Iterator-Kategorie
Gegeben die folgenden Typen
- Sei
OuterCstd::iterator_traits<OuterIter>::iterator_category. - Sei
InnerCstd::iterator_traits<InnerIter>::iterator_category. - Sei
PatternCstd::iterator_traits<PatternIter>::iterator_category.
iterator_category ist definiert genau dann, wenn std::is_reference_v<InnerBase > true ist und Base und InnerBase jeweils forward_range modellieren. In diesem Fall ist es wie folgt definiert
- Wenn std::is_reference_v<std::common_reference_t<ranges::range_reference_t<
InnerBase>,ranges::range_reference_t<PatternBase>> ist false, bezeichnetiterator_categorystd::input_iterator_tag. - Andernfalls, wenn alle folgenden Bedingungen erfüllt sind, bezeichnet
iterator_categorystd::bidirectional_iterator_tag-
OuterC,InnerCundPatternCmodellieren jeweils std::derived_from<std::bidirectional_iterator_tag>. -
InnerBaseundPatternBasemodellieren jeweilscommon_range.
-
- Andernfalls, wenn
OuterC,InnerCundPatternCjeweils std::derived_from<std::forward_iterator_tag> modellieren, bezeichnetiterator_categorystd::forward_iterator_tag. - Andernfalls bezeichnet
iterator_categorystd::input_iterator_tag.
[edit] Datenmember
| Mitglied | Beschreibung |
Parent * parent_ |
der Zeiger auf die übergeordnete join_with_view((exposition-only member object*) |
OuterIter outer_it_(nur vorhanden, wenn Base forward_range modelliert)
|
der äußere Iterator ((exposition-only member object*) |
std::variant<PatternIter , InnerIter > inner_it_ |
der innere Iterator ((exposition-only member object*) |
[edit] Member-Funktionen
| Konstruiert einen Iterator (öffentliche Memberfunktion) | |
| greift auf das Element zu (öffentliche Memberfunktion) | |
| bewegt den zugrundeliegenden Iterator vorwärts oder rückwärts (public member function) |
[edit] Nicht-Member-Funktionen
| (C++23) |
vergleicht die zugrundeliegenden Iteratoren (Funktion) |
| (C++23) |
castet das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen rvalue-Referenztyp (Funktion) |
| (C++23) |
tauscht die Objekte, auf die zwei zugrundeliegende Iteratoren zeigen (Funktion) |