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) | (начиная с 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) | (начиная с C++23) |
Вычисляет минимальное расстояние между базовым кортежем итераторов x и базовым кортежем сентинелов y.
Эти функции не видны при обычном неквалифицированном или квалифицированном поиске и могут быть найдены только с помощью поиска, зависящего от аргументов, если zip_view::sentinel<Const> является ассоциированным классом аргументов.
Параметры
| x | - | итератор |
| y | - | сентинел |
Возвращаемое значение
Пусть current_ обозначает базовый кортеж итераторов x, а end_ — базовый кортеж сентинелов y.
Пусть DIST(x, y, i) — расстояние, вычисленное выражением, эквивалентным std::get<i>(x.current_) - std::get<i>(y.end_), для некоторого целого числа i.
1) значение с наименьшим абсолютным значением среди
DIST(x, y, i) всех i в диапазоне 0 ≤ i < sizeof...(Views)
2)
-(x - y).Пример
#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);
// The following code fires a compile-time error because std::list::iterator
// does not support operator- that is needed to calculate the distance:
// auto e = q.begin() - q.end();
}
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/zip_view/sentinel/operator-