Namespaces
Variants

std::ranges::join_with_view<V,Pattern>:: iterator <Const>:: operator++,--

From cppreference.net
Ranges library
Range adaptors
constexpr /*iterator*/ & operator ++ ( ) ;
(1) (depuis C++23)
constexpr void operator ++ ( int ) ;
(2) (depuis C++23)
constexpr /*iterator*/ operator ++ ( int )

nécessite std:: is_reference_v < /*InnerBase*/ > &&
ranges:: forward_range < /*Base*/ > &&

ranges:: forward_range < /*InnerBase*/ > ;
(3) (depuis C++23)
constexpr /*iterator*/ & operator -- ( )

nécessite std:: is_reference_v < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*Base*/ > &&
ranges:: bidirectional_range < /*InnerBase*/ > &&
ranges:: common_range < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*PatternBase*/ > &&

ranges:: common_range < /*PatternBase*/ > ;
(4) (depuis C++23)
constexpr /*iterator*/ operator -- ( int )

nécessite std:: is_reference_v < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*Base*/ > &&
ranges:: bidirectional_range < /*InnerBase*/ > &&
ranges:: common_range < /*InnerBase*/ > &&
ranges:: bidirectional_range < /*PatternBase*/ > &&

ranges:: common_range < /*PatternBase*/ > ;
(5) (depuis C++23)

Incrémente ou décrémente l'itérateur.

1) Incrémente l' itérateur interne comme par std:: visit ( [ ] ( auto & it ) { ++ it ; } , inner_it_  ) ; .
Après cela, ajuste les itérateurs internes et externes comme suit :
  • Si l'itérateur interne incrémenté est l'itérateur de fin de la plage de motif, il est défini comme un itérateur vers le début de la plage interne suivante.
  • Si l'itérateur interne incrémenté est l'itérateur de fin d'une plage interne, l'itérateur externe est incrémenté. Puis :
  • Si l'itérateur externe incrémenté n'est pas l'itérateur de fin de la plage externe, l'itérateur interne est défini comme un itérateur vers le début de la plage de motif.
  • Sinon, si std:: is_reference_v < InnerBase   > est true , l'itérateur interne est défini comme un itérateur de motif contenant une valeur singulière .
  • Répète les opérations ci-dessus jusqu'à ce que l'itérateur interne ne soit pas un itérateur de fin, ou que l'itérateur externe soit un itérateur de fin.
2) Équivalent à ++* this ; .
3) Équivalent à auto tmp = * this ;
++* this ;
return tmp ;
.
4) Si l'itérateur externe est l'itérateur de fin de la plage externe, le décrémente et définit l'itérateur interne comme l'itérateur de fin de la dernière plage interne, sinon ne fait rien.
Après cela, ajuste les itérateurs internes et externes comme suit :
  • Si l'itérateur interne fait référence au début d'une plage interne, il est défini sur l'itérateur de fin de la plage de motif.
  • Si l'itérateur interne fait référence au début de la plage de motif, l'itérateur externe est décrémenté et l'itérateur interne est défini sur l'itérateur de fin de la plage interne précédente.
  • Répète les opérations ci-dessus jusqu'à ce que l'itérateur interne ne fasse plus référence au début d'aucune plage.
Finalement, décrémente l'itérateur interne comme si par std:: visit ( [ ] ( auto & it ) { -- it ; } , inner_it_  ) ; .
5) Équivalent à auto tmp = * this ;
--* this ;
return tmp ;
.

Valeur de retour

1,4) * this
3,5) Une copie de * this qui a été réalisée avant la modification.