Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
Bibliothèque de plages (ranges)
Adaptateurs de plage
 
 
constexpr /*iterator*/& operator++();
(1) (depuis C++23)
constexpr void operator++( int );
(2) (depuis C++23)
constexpr /*iterator*/ operator++( int )
    requires std::is_reference_v</*InnerBase*/> &&
             ranges::forward_range</*Base*/> &&
             ranges::forward_range</*InnerBase*/>;
(3) (depuis 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) (depuis 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) (depuis C++23)

Incrémente ou décrémente l'itérateur.

1) Incrémente l'itérateur interne comme par std::visit([](auto& it){ ++it; }, inner_it_ );.
Ensuite, ajuste les itérateurs interne et externe comme suit :
  • Si l'itérateur interne incrémenté est l'itérateur de fin de la plage du motif, il est défini sur un itérateur pointant vers le début de la plage interne suivante.
  • Si l'itérateur interne incrémenté est l'itérateur de fin d'une plage interne, l'itérateur externe est incrémenté. Ensuite :
  • Si l'itérateur externe incrémenté n'est pas l'itérateur de fin de la plage externe, l'itérateur interne est défini sur un itérateur pointant vers le début de la plage du motif.
  • Sinon, si std::is_reference_v<InnerBase > est true, l'itérateur interne est défini sur un itérateur de motif contenant une valeur singulière.
  • Répète les opérations ci-dessus jusqu'à ce que soit l'itérateur interne ne soit pas un itérateur de fin, soit l'itérateur externe soit un itérateur de fin.
2) Équivalent à ++*this;.
3) Équivalent à auto tmp = *this;
++*this;
return tmp;
.
4) Si l'itérateur externe est l'itérateur de fin de la plage externe, le décrémente et définit l'itérateur interne sur l'itérateur de fin de la dernière plage interne, sinon ne fait rien.
Ensuite, ajuste les itérateurs interne et externe comme suit :
  • Si l'itérateur interne fait référence au début d'une plage interne, il est défini sur l'itérateur de fin de la plage du motif.
  • Si l'itérateur interne fait référence au début de la plage du motif, l'itérateur externe est décrémenté, et l'itérateur interne est défini sur l'itérateur de fin de la plage interne précédente.
  • Répète les opérations ci-dessus jusqu'à ce que l'itérateur interne ne fasse référence au début d'aucune plage.
Enfin, décrémente l'itérateur interne comme par std::visit([](auto& it){ --it; }, inner_it_ );.
5) Équivalent à auto tmp = *this;
--*this;
return tmp;
.

Valeur de retour

1,4) * this
3,5) Une copie de * this qui a été réalisée avant la modification.