Namensräume
Varianten
Aktionen

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

Von cppreference.com
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
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, als ob mittels 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 den 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 den Anfang des Pattern-Bereichs gesetzt.
  • Andernfalls, wenn std::is_reference_v<InnerBase > ist true, wird der innere Iterator auf einen Pattern-Iterator gesetzt, der einen singulären Wert enthält.
  • Die obigen Operationen werden wiederholt, bis entweder der innere Iterator kein Past-the-End-Iterator ist oder der äußere Iterator ein Past-the-End-Iterator ist.
2) Äquivalent zu ++*this;.
3) Äquivalent zu auto tmp = *this;
++*this;
return tmp;
.
4) Wenn der äußere Iterator der Past-the-End-Iterator des äußeren Bereichs ist, wird er dekrementiert und der innere Iterator auf den Past-the-End-Iterator des letzten inneren Bereichs gesetzt, andernfalls wird nichts getan.
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 obigen Operationen werden wiederholt, bis der innere Iterator nicht auf den Anfang eines Bereichs verweist.
Schließlich wird der innere Iterator dekrementiert, als ob mittels std::visit([](auto& it){ --it; }, inner_it_ );.
5) Äquivalent zu auto tmp = *this;
--*this;
return tmp;
.

[bearbeiten] Rückgabewert

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