Namespaces
Variants

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

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

requiere 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) (desde C++23)
constexpr /*iterator*/ ( /*Parent*/ & parent, /*OuterIter*/ outer )
requiere std:: forward_range < /*Base*/ > ;
(3) (desde C++23)
( solo para exposición* )
constexpr explicit /*iterator*/ ( /*Parent*/ parent )
requiere ( ! std:: forward_range < /*Base*/ > ) ;
(4) (desde C++23)
( solo para exposición* )

Construye un iterador. Las sobrecargas (3,4) son llamadas por begin() y end() de ranges::join_with_view .

Sobrecarga Miembros de datos
parent_ outer_it_ inner_it_
(1) inicializado con nullptr inicializado por valor
(solo si Base modela forward_range )
inicializado por defecto
(2) inicializado con i. parent_ inicializado con std :: move ( i. outer_it_
(solo si Base modela forward_range )
(3) inicializado con
std:: addressof ( parent )
inicializado con std :: move ( outer )
(4) N/A
2) Después de inicializar los miembros de datos, equivalente a

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) Después de inicializar los miembros de datos, ajuste el iterador externo como si el iterador interno hubiera sido incrementado por operator++() .

Parámetros

i - un iterador mutable
parent - un objeto std::ranges::join_with_view
outer - un iterador hacia el rango subyacente de parent

Ejemplo