operator-(ranges::zip_view::sentinel)
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é.
DIST
(x, y, i)
pour tous les
i
dans l'intervalle
0 ≤ i < sizeof...(Views)
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(); }