std::ranges:: lazy_split_view<V, Pattern>:: inner_iterator
|
template
<
bool
Const
>
struct /*inner_iterator*/ ; |
(seit C++20)
( nur zur Darstellung* ) |
|
Der Rückgabetyp von
lazy_split_view::
outer_iterator
::
value_type
::
begin
(
)
.
Const
entspricht dem Template-Argument von
outer_iterator
.
Mitgliedertypen
| Mitglied | Definition |
Base
|
maybe-const
<
Const, V
>
( Nur-Darstellungs-Mitgliedstyp* ) |
iterator_concept
|
|
iterator_category
(bedingt vorhanden) |
Nur vorhanden, falls
|
value_type
|
ranges:: range_value_t < Base > |
difference_type
|
ranges:: range_difference_t < Base > |
Datenmitglieder
| Mitglied | Beschreibung |
outer_iterator
<
Const
>
i_
(privat)
|
ein Iterator in das zugrundeliegende
view
des Elternobjekts
lazy_split_view
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
bool
incremented_
(privat)
|
ein Flag, das anzeigt, ob der
operator
++
mindestens einmal für dieses Objekt aufgerufen wurde
( Nur zur Darstellung verwendetes Mitgliedsobjekt* ) |
Memberfunktionen
|
(Konstruktor)
(C++20)
|
konstruiert einen Iterator
(öffentliche Elementfunktion) |
|
base
(C++20)
|
gibt den zugrundeliegenden Iterator zurück
(öffentliche Elementfunktion) |
|
operator*
(C++20)
|
gibt das aktuelle Element zurück
(öffentliche Elementfunktion) |
|
operator++
operator++
(int)
(C++20)
|
erhöht den Iterator
(öffentliche Elementfunktion) |
Memberfunktionen
std::ranges::lazy_split_view:: inner_iterator :: inner_iterator
|
/*inner_iterator*/
(
)
=
default
;
|
(1) | (seit C++20) |
|
constexpr
explicit
/*inner_iterator*/
(
/*outer_iterator*/
<
Const
>
i
)
;
|
(2) | (seit C++20) |
i_
über seinen Standard-Member-Initialisierer (=
/*outer_iterator*/
<
Const
>
(
)
).
Das Datenmitglied
incremented_
wird mit seinem Standard-Member-Initialisierer auf
false
initialisiert.
std::ranges::lazy_split_view:: inner_iterator :: base
|
constexpr
const
ranges::
iterator_t
<
Base
>
&
base
(
)
const
&
noexcept
;
|
(1) | (seit C++20) |
|
constexpr
ranges::
iterator_t
<
Base
>
base
(
)
&&
requires ranges:: forward_range < V > ; |
(2) | (seit C++20) |
Gibt eine Kopie des zugrundeliegenden Iterators zurück.
std::ranges::lazy_split_view:: inner_iterator :: operator*
|
constexpr
decltype
(
auto
)
operator
*
(
)
const
;
|
(seit C++20) | |
Gibt das Element zurück, auf das der zugrunde liegende Iterator zeigt.
Entspricht return * i_. /*cur*/ ( ) ; .
std::ranges::lazy_split_view:: inner_iterator :: operator++
|
constexpr
/*inner_iterator*/
&
operator
++
(
)
;
|
(1) | (seit C++20) |
|
constexpr
decltype
(
auto
)
operator
++
(
int
)
;
|
(2) | (seit C++20) |
incremented_ = true ;
if
constexpr
(
!
ranges::
forward_range
<
Base
>
)
{
if
constexpr
(
Pattern
::
size
(
)
==
0
)
return
*
this
;
}
++
i_.
/*cur*/
(
)
;
if constexpr ( ranges:: forward_range < Base > )
{
auto
tmp
=
*
this
;
++*
this
;
return
tmp
;
}
else
++*
this
;
// keine return-Anweisung
Nicht-Member-Funktionen
|
operator==
(C++20)
|
vergleicht die Iteratoren oder den Iterator und
std::default_sentinel
(Funktion) |
|
iter_move
(C++20)
|
konvertiert das Ergebnis der Dereferenzierung des zugrundeliegenden Iterators in seinen zugehörigen Rvalue-Referenztyp
(Funktion) |
|
iter_swap
(C++20)
|
vertauscht die Objekte, auf die zwei zugrundeliegende Iteratoren zeigen
(Funktion) |
operator== (std::ranges::split_view:: inner_iterator )
|
friend
constexpr
bool
operator
==
(
const
/*inner_iterator*/
&
x,
const
/*inner_iterator*/
&
y
)
|
(1) | (seit C++20) |
|
friend
constexpr
bool
operator
==
(
const
/*inner_iterator*/
&
x,
std:: default_sentinel_t ) ; |
(2) | (seit C++20) |
auto [pcur, pend] = ranges::subrange{x.i_.parent_->pattern_}; auto end = ranges::end(x.i_.parent_->base_); if constexpr (/*tiny_range*/<Pattern>) { const auto& cur = x.i_./*cur*/(); if (cur == end) return true; if (pcur == pend) return x.incremented_; return *cur == *pcur; } else { auto cur = x.i_./*cur*/(); if (cur == end) return true; if (pcur == pend) return x.incremented_; do { if (*cur != *pcur) return false; if (++pcur == pend) return true; } while (++cur != end); return false; }
Der
!=
-Operator wird aus
operator==
synthetisiert
.
Diese Funktionen sind für gewöhnliche
unqualifizierte
oder
qualifizierte Suche
nicht sichtbar und können nur durch
argumentabhängige Suche
gefunden werden, wenn
std::ranges::split_view::
inner_iterator
eine assoziierte Klasse der Argumente ist.
iter_move (std::ranges::split_view:: inner_iterator )
|
friend
constexpr
decltype
(
auto
)
iter_move
(
const
/*inner_iterator*/
&
i
)
noexcept ( noexcept ( ranges:: iter_move ( i. i_ . /*cur*/ ( ) ) ) ) ; |
(seit C++20) | |
Entspricht return ranges:: iter_move ( i. i_ . /*cur*/ ( ) ) ; .
Diese Funktion ist für gewöhnliches
unqualifiziertes
oder
qualifiziertes Nachschlagen
nicht sichtbar und kann nur durch
argumentabhängiges Nachschlagen
gefunden werden, wenn
std::ranges::split_view::
inner_iterator
eine assoziierte Klasse der Argumente ist.
iter_swap (std::ranges::split_view:: inner_iterator )
|
friend
constexpr
void
iter_swap
(
const
/*inner_iterator*/
&
x,
const
/*inner_iterator*/
&
y
)
|
(seit C++20) | |
Entspricht ranges:: iter_swap ( x. i_ . /*cur*/ ( ) , y. i_ . /*cur*/ ( ) ) .
Diese Funktion ist für gewöhnlichen
unqualifizierten
oder
qualifizierten Lookup
nicht sichtbar und kann nur durch
argumentabhängige Suche
gefunden werden, wenn
std::ranges::split_view::
inner_iterator
eine assoziierte Klasse der Argumente ist.
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 3591 | C++20 |
die
&&
Überladung von
base
könnte äußere Iteratoren ungültig machen
|
Constraints hinzugefügt |
| LWG 3593 | C++20 |
die
const
&
Überladung von
base
gibt eine Referenz zurück, könnte aber nicht noexcept sein
|
noexcept gemacht |