Namespaces
Variants

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

Von de.cppreference.net
 
 
Bereichsbibliothek
Bereichsadapter
 
 
constexpr /*iterator*/& operator++();
(1) (seit C++23)
constexpr void operator++( int );
(2) (seit C++23)
constexpr /*iterator*/ operator++( int )
    requires std::is_reference_v</*InnerBase*/> &&
             ranges::forward_range</*Base*/> &&
             ranges::forward_range</*InnerBase*/>;
(3) (seit C++23)
constexpr /*iterator*/& operator--()
    requires 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 )
    requires 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)

Inkrementiert oder dekrementiert den Iterator.

1) Inkrementiert den inneren Iterator wie durch std::visit([](auto& it){ ++it; }, inner_it_ );.
Danach passt es die inneren und äußeren Iteratoren wie folgt an:
  • Wenn der inkrementierte innere Iterator der Ende-Iterator des Muster-Bereichs ist, wird er auf einen Iterator zum Anfang des nächsten inneren Bereichs gesetzt.
  • Wenn der inkrementierte innere Iterator der Ende-Iterator eines inneren Bereichs ist, wird der äußere Iterator inkrementiert. Dann:
  • Wenn der inkrementierte äußere Iterator nicht der Ende-Iterator des äußeren Bereichs ist, wird der innere Iterator auf einen Iterator zum Anfang des Muster-Bereichs gesetzt.
  • Ansonsten, wenn std::is_reference_v<InnerBase > true ist, wird der innere Iterator auf einen Muster-Iterator gesetzt, der einen singulären Wert hält.
  • Wiederholt die obigen Operationen, bis entweder der innere Iterator kein Ende-Iterator ist oder der äußere Iterator ein Ende-Iterator ist.
2) Entspricht ++*this;.
3) Entspricht auto tmp = *this;
++*this;
return tmp;
.
4) Wenn der äußere Iterator der Ende-Iterator des äußeren Bereichs ist, dekrementiert ihn und setzt den inneren Iterator auf den Ende-Iterator des letzten inneren Bereichs, ansonsten tue nichts.
Danach passt es die inneren und äußeren Iteratoren wie folgt an:
  • Wenn der innere Iterator auf den Anfang eines inneren Bereichs verweist, wird er auf den Ende-Iterator des Muster-Bereichs gesetzt.
  • Wenn der innere Iterator auf den Anfang des Muster-Bereichs verweist, wird der äußere Iterator dekrementiert und der innere Iterator auf den Ende-Iterator des vorherigen inneren Bereichs gesetzt.
  • Wiederholt die obigen Operationen, bis der innere Iterator nicht auf den Anfang eines Bereichs verweist.
Schließlich dekrementiert den inneren Iterator wie 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.