Namensräume
Varianten
Aktionen

std::ranges::cartesian_product_view<First, Vs...>::iterator<Const>::next, std::ranges::cartesian_product_view<First, Vs...>::iterator<Const>::prev, std::ranges::cartesian_product_view<First, Vs...>::iterator<Const>::distance_from

Von cppreference.com
 
 
Bereichsbibliothek
Range-Adaptoren
 
 

Inhalt

std::ranges::cartesian_product_view::iterator::next

template< std::size_t N = sizeof...(Vs) >
constexpr void /*next*/();
(seit C++23)
(nur Exposition*)

Wenn mit dem Standard-Template-Parameter aufgerufen, wird rekursiv das nächste Element (das Tupel von Iteratoren) in cartesian_product_view generiert.

Sei current_ das zugrundeliegende Tupel von Iteratoren. Äquivalent zu

auto& it = std::get<N>(current_);
++it;
if constexpr (N > 0)
{
    if (it == ranges::end(std::get<N>(parent_->bases_)))
    {
        it = ranges::begin(std::get<N>(parent_->bases_));
        next<N - 1>();
    }
}

Wird in den folgenden nicht-statischen Member-Funktionen verwendet

std::ranges::cartesian_product_view::iterator::prev

template< std::size_t N = sizeof...(Vs) >
constexpr void /*prev*/();
(seit C++23)
(nur Exposition*)

Wenn mit dem Standard-Template-Parameter aufgerufen, wird rekursiv das vorherige Element (das Tupel von Iteratoren) in cartesian_product_view generiert.

Sei current_ das zugrundeliegende Tupel von Iteratoren. Äquivalent zu

auto& it = std::get<N>(current_);
if constexpr (N > 0)
{
    if (it == ranges::begin(std::get<N>(parent_->bases_)))
    {
        it = /*cartesian-common-arg-end*/(std::get<N>(parent_->bases_));
        prev<N - 1>();
    }
}
--it;

Wird in den folgenden nicht-statischen Member-Funktionen verwendet

std::ranges::cartesian_product_view::iterator::distance_from

template< class Tuple >

constexpr difference_type

    /*distance-from*/( const Tuple& t ) const;
(seit C++23)
(nur Exposition*)

Gibt den "Abstand" (d.h. die Anzahl der "Hüpfer") zwischen zwei Iteratoren zurück.

Seien

  • parent_ sei der zugrundeliegende Zeiger auf cartesian_product_view
  • /*scaled-size*/(N) sei
    • das Produkt von static_cast<difference_type>(ranges::size(std::get<N>(parent_->bases_))) und /*scaled-size*/(N + 1), wenn N ≤ sizeof...(Vs), andernfalls
    • static_cast<difference_type>(1);
  • /*scaled-distance*/(N) sei das Produkt von static_cast<difference_type>(std::get<N>(current_) - std::get<N>(t)) und /*scaled-size*/(N + 1);
  • /*scaled-sum*/ sei die Summe von /*scaled-distance*/(N) für jede ganze Zahl 0 ≤ N ≤ sizeof...).

Rückgabewert: /*scaled-sum*/.

Das Verhalten ist undefiniert, wenn /*scaled-sum*/ durch difference_type dargestellt werden kann.

Wird in den folgenden Funktionen verwendet

Parameter

t - ein Tupel von Iteratoren, um den Abstand zu finden