Spec-Zone.ru › C++

оператор-(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 <ranges>
#include <vector>
#include <deque>
#include <list>
 
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/w/cpp/ranges/zip_view/sentinel/operator-

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API