Namespaces
Variants

operator-(ranges::zip_view::sentinel)

Depuis fr.cppreference.net
 
 
Bibliothèque de ranges
Adaptateurs de range
 
 
template< bool OtherConst >
    requires (std::sized_sentinel_for<
                ranges::sentinel_t</*maybe-const*/<Const, Views>>,
                ranges::iterator_t</*maybe-const*/<OtherConst, Views>>> && ...)
friend constexpr
    std::common_type_t<ranges::range_difference_t</*maybe-const*/<OtherConst, Views>>...>
operator-( const iterator<OtherConst>& x, const sentinel& y );
(1) (depuis C++23)
template< bool OtherConst >
    requires (std::sized_sentinel_for<
                ranges::sentinel_t</*maybe-const*/<Const, Views>>,
                ranges::iterator_t</*maybe-const*/<OtherConst, Views>>> && ...)
friend constexpr
    std::common_type_t<ranges::range_difference_t</*maybe-const*/<OtherConst, Views>>...>
operator-( const sentinel& y, const iterator<OtherConst>& x );
(2) (depuis C++23)

Calcule la distance minimale entre le tuple sous-jacent des itérateurs de x et le tuple sous-jacent des sentinelles de y.

Ces fonctions ne sont pas visibles par la recherche non qualifiée ou la recherche qualifiée ordinaires, et ne peuvent être trouvées que par la recherche dépendante des arguments lorsque zip_view::sentinel<Const> est une classe associée aux arguments.

Paramètres

x - un iterator
y - une sentinel

Valeur de retour

Soit current_ le tuple sous-jacent d'itérateurs de x , et end_ le tuple sous-jacent de sentinelles de y .

Soit DIST (x, y, i) une distance calculée par une expression équivalente à std :: get < i > ( x. current_ ) - std :: get < i > ( y. end_ ) pour un entier i donné.

1) la valeur avec la plus petite valeur absolue parmi DIST (x, y, i) pour tous les i dans l'intervalle 0 ≤ i < sizeof...(Views)
2) - ( x - y ) .

Exemple

#include <cassert>
#include <deque>
#include <list>
#include <ranges>
#include <vector>
int main()
{
    auto x = std::vector{1, 2, 3, 4};
    auto y = std::deque{'a', 'b', 'c'};
    auto z = {1.1, 2.2};
    auto w = std::list{1, 2, 3};
    auto p = std::views::zip(x, y, z);
    assert(p.begin() - p.end() == +2);
    assert(p.end() - p.begin() == -2);
    [[maybe_unused]]
    auto q = std::views::zip(x, y, w);
    // Le code suivant génère une erreur de compilation car std::list::iterator
    // ne supporte pas l'opérateur- nécessaire pour calculer la distance :
    // auto e = q.begin() - q.end();
}