std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--
Von de.cppreference.net
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.
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>trueist, 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.