std::ranges::join_with_view<V,Pattern>::iterator<Const>::operator++,--
De es.cppreference.net
constexpr /*iterator*/& operator++();
|
(1) | (desde C++23) |
constexpr void operator++( int );
|
(2) | (desde C++23) |
constexpr /*iterator*/ operator++( int )
requires std::is_reference_v</*InnerBase*/> &&
ranges::forward_range</*Base*/> &&
ranges::forward_range</*InnerBase*/>;
|
(3) | (desde 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) | (desde 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) | (desde C++23) |
Incrementa o decrementa el iterador.
Después de eso, ajusta los iteradores interno y externo de la siguiente manera:
- Si el iterador interno incrementado es el iterador de final del rango del patrón, se establece a un iterador al principio del siguiente rango interno.
- Si el iterador interno incrementado es el iterador de final de un rango interno, se incrementa el iterador externo. Luego:
- Si el iterador externo incrementado no es el iterador de final del rango externo, el iterador interno se establece a un iterador al principio del rango del patrón.
- De lo contrario, si
std::is_reference_v<InnerBase>estrue, el iterador interno se establece a un iterador de patrón que contiene un valor singular.
- Repite las operaciones anteriores hasta que el iterador interno no sea un iterador de final, o el iterador externo sea un iterador de final.
2) Equivalente a
++*this;.3) Equivalente a
auto tmp = *this;++*this;return tmp;.4) Si el iterador externo es el iterador de final del rango externo, lo decrementa y establece el iterador interno al iterador de final del último rango interno; de lo contrario, no hace nada.
Después de eso, ajusta los iteradores interno y externo de la siguiente manera:
- Si el iterador interno se refiere al principio de un rango interno, se establece al iterador de final del rango del patrón.
- Si el iterador interno se refiere al principio del rango del patrón, se decrementa el iterador externo, y el iterador interno se establece al iterador de final del rango interno anterior.
- Repite las operaciones anteriores hasta que el iterador interno no se refiera al principio de ningún rango.
Finalmente, decrementa el iterador interno como si fuera
std::visit([](auto& it){ --it; }, inner_it_ );.5) Equivalente a
auto tmp = *this;--*this;return tmp;.Valor de retorno
1,4)
*
this
3,5)
Una copia de
*
this
que se realizó antes del cambio.