Namespaces
Variants

std::ranges::join_with_view<V,Pattern>:: iterator <Const>:: iterator

From cppreference.net
Ranges library
Range adaptors
/*iterator*/ ( ) = default ;
(1) (seit C++23)
constexpr /*iterator*/ ( /*iterator*/ < ! Const > i )

erfordert Const &&
std:: convertible_to < ranges:: iterator_t < V > , /*OuterIter*/ > &&
std:: convertible_to < ranges:: iterator_t < /*InnerRng*/ > ,
/*InnerIter*/ > &&

std:: convertible_to < ranges:: iterator_t < Pattern > , /*PatternIter*/ > ;
(2) (seit C++23)
constexpr /*iterator*/ ( /*Parent*/ & parent, /*OuterIter*/ outer )
erfordert std:: forward_range < /*Base*/ > ;
(3) (seit C++23)
( nur zur Darstellung* )
constexpr explicit /*iterator*/ ( /*Parent*/ parent )
erfordert ( ! std:: forward_range < /*Base*/ > ) ;
(4) (seit C++23)
( nur zur Darstellung* )

Konstruiert einen Iterator. Die Überladungen (3,4) werden von begin() und end() des ranges::join_with_view aufgerufen.

Überladung Datenelemente
parent_ outer_it_ inner_it_
(1) initialisiert mit nullptr wertinitialisiert
(nur falls Base das Konzept forward_range modelliert)
standardinitialisiert
(2) initialisiert mit i. parent_ initialisiert mit std :: move ( i. outer_it_
(nur falls Base das Konzept forward_range modelliert)
(3) initialisiert mit
std:: addressof ( parent )
initialisiert mit std :: move ( outer )
(4) N/A
2) Nach der Initialisierung der Datenmitglieder, äquivalent zu

if ( i. inner_it_  . index ( ) == 0 )
inner_it_  . template emplace < 0 > ( std :: get < 0 > ( std :: move ( i. inner_it_  ) ) ) ;
else
inner_it_  . template emplace < 1 > ( std :: get < 1 > ( std :: move ( i. inner_it_  ) ) ) ;

.
3,4) Nach der Initialisierung der Datenmitglieder passen Sie den äußeren Iterator an, als ob der innere Iterator durch operator++() inkrementiert worden wäre.

Parameter

i - ein veränderlicher Iterator
parent - ein std::ranges::join_with_view Objekt
outer - ein Iterator in den zugrundeliegenden Bereich von parent

Beispiel