std::ranges::join_with_view<V,Pattern>::iterator<Const>:operator++,--
Von cppreference.com
< cpp | ranges | join with view | iterator
| 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*/> && |
(3) | (seit C++23) |
| constexpr /*Iterator*/& operator--() requires std::is_reference_v</*InnerBase*/> && |
(4) | (seit C++23) |
| constexpr /*Iterator*/ operator--( int ) requires std::is_reference_v</*InnerBase*/> && |
(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;.
++*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;.
--*this;
return tmp;.
[bearbeiten] Rückgabewert
1,4) *this
3,5) Eine Kopie von *this, die vor der Änderung erstellt wurde.