Namespaces
Variants

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

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rango
 
 
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.

1) Incrementa el iterador interno como si fuera std::visit([](auto& it){ ++it; }, inner_it_ );.
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 > es true, 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.