Namespaces
Variants

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

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

erfordert std:: is_reference_v < /*InnerBase*/ > &&
ranges:: forward_range < /*Base*/ > &&

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

erfordert 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) (seit C++23)
constexpr /*iterator*/ operator -- ( int )

erfordert 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) (seit C++23)

Erhöht oder verringert den Iterator.

1) Inkrementiert den inneren Iterator als ob durch std:: visit ( [ ] ( auto & it ) { ++ it ; } , inner_it_  ) ; .
Danach werden die inneren und äußeren Iteratoren wie folgt angepasst:
  • Wenn der inkrementierte innere Iterator der Past-the-End-Iterator des Pattern-Bereichs ist, wird er auf einen Iterator zum Anfang des nächsten inneren Bereichs gesetzt.
  • Wenn der inkrementierte innere Iterator der Past-the-End-Iterator eines inneren Bereichs ist, wird der äußere Iterator inkrementiert. Dann:
  • Wenn der inkrementierte äußere Iterator nicht der Past-the-End-Iterator des äußeren Bereichs ist, wird der innere Iterator auf einen Iterator zum Anfang des Pattern-Bereichs gesetzt.
  • Andernfalls, wenn std:: is_reference_v < InnerBase   > true ist, wird der innere Iterator auf einen Pattern-Iterator gesetzt, der einen singulären Wert enthält.
  • Wiederholt die obigen Operationen, bis entweder der innere Iterator kein Past-the-End-Iterator ist oder der äußere Iterator ein Past-the-End-Iterator ist.
2) Entspricht ++* this ; .
3) Entspricht auto tmp = * this ;
++* this ;
return tmp ;
.
4) Wenn der äußere Iterator der Past-the-End-Iterator des äußeren Bereichs ist, dekrementiert man ihn und setzt den inneren Iterator auf den Past-the-End-Iterator des letzten inneren Bereichs, andernfalls tut man nichts.
Danach werden die inneren und äußeren Iteratoren wie folgt angepasst:
  • Wenn der innere Iterator auf den Anfang eines inneren Bereichs verweist, wird er auf den Past-the-End-Iterator des Pattern-Bereichs gesetzt.
  • Wenn der innere Iterator auf den Anfang des Pattern-Bereichs verweist, wird der äußere Iterator dekrementiert und der innere Iterator auf den Past-the-End-Iterator des vorherigen inneren Bereichs gesetzt.
  • Die oben genannten Operationen werden wiederholt, bis der innere Iterator nicht mehr auf den Anfang eines Bereichs verweist.
Schließlich dekrementiert es den inneren Iterator als ob durch std:: visit ( [ ] ( auto & it ) { -- it ; } , inner_it_  ) ; .
5) Entspricht auto tmp = * this ;
--* this ;
return tmp ;
.

Rückgabewert

1,4) * this
3,5) Eine Kopie von * this die vor der Änderung erstellt wurde.