Spec-Zone.ru › C++

operator+,-(ranges::concat_view::iterator)

friend constexpr /*iterator*/
    operator+( const /*iterator*/& it, difference_type n )
        requires /*concat-is-random-access*/<Const, Views...>;
(1) (начиная с C++26)
friend constexpr /*iterator*/
    operator+( difference_type n, const /*iterator*/& it )
        requires /*concat-is-random-access*/<Const, Views...>;
(2) (начиная с C++26)
friend constexpr /*iterator*/
    operator-( const /*iterator*/& it, difference_type n )
        requires /*concat-is-random-access*/<Const, Views...>;
(3) (начиная с C++26)
friend constexpr difference_type
    operator-( const /*iterator*/& x, const /*iterator*/& y )
        requires /*concat-is-random-access*/<Const, Views...>;
(4) (начиная с C++26)
friend constexpr difference_type
    operator-( const /*iterator*/& x, std::default_sentinel_t )
        requires /* see description */;
(5) (начиная с C++26)
friend constexpr difference_type
    operator-( std::default_sentinel_t, const /*iterator*/& x )
        requires /* see description */;
(6) (начиная с C++26)

Увеличивает или уменьшает итератор.

1) Эквивалентно auto t = it; t += n; return t;.
2) Эквивалентно return it + n;.
3) Эквивалентно auto t = it; t -= n; return t;.
4) Пусть Ix будет x.it_ .index(), а Iy будет y.it_ .index():
  • Если Ix > Iy — это true, эквивалентно difference_typeresult=ranges::distance(y.get-iter <Iy>(),y.get-end <Iy>());
    for(std::size_tI=Iy+1;I<Ix;I++)
        result+=ranges::distance(x.get-view <I>());
    returnresult+ranges::distance(x.get-begin <Ix>(),x.get-iter <Ix>());
    .
  • Иначе, если Ix < Iy — это true, эквивалентно return -(y - x);.
  • В противном случае эквивалентно returnx.get-iter <Ix>()-y.get-iter <Iy>();.
Если x.it_ .valueless_by_exception()||y.it_ .valueless_by_exception() — это true, поведение не определено.
5) Пусть Ix будет x.it_ .index(); это эквивалентно difference_typeresult=ranges::distance(x.get-iter <Ix>(),x.get-end <Ix>());
for(std::size_tI=Ix+1,count=sizeof...(Views);I<count;I++)
    result+=ranges::distance(x.get-view <I>());
return-result;
.
Пусть Fs будет набором, состоящим из всех элементов Views, кроме первого элемента; выражение в предложении requires эквивалентно

(std::sized_sentinel_for<ranges::sentinel_t<maybe-const <Const,Views>>,
                         ranges::iterator_t<maybe-const <Const,Views>>>&&...)&&
    (ranges::sized_range<maybe-const <Const,Fs>>&&...)

.
Если x.it_ .valueless_by_exception() — это true, поведение не определено.
6) Эквивалентно return -(x - std::default_sentinel);.
Пусть Fs будет набором, состоящим из всех элементов Views, кроме первого элемента; выражение в предложении requires эквивалентно

(std::sized_sentinel_for<ranges::sentinel_t<maybe-const <Const,Views>>,
                         ranges::iterator_t<maybe-const <Const,Views>>>&&...)&&
    (ranges::sized_range<maybe-const <Const,Fs>>&&...)

.
Если x.it_ .valueless_by_exception() — это true, поведение не определено.

Эти функции не видны при обычном неквалифицированном поиске или квалифицированном поиске и могут быть найдены только с помощью поиска, зависящего от аргументов, если concat_view::iterator <Const> является ассоциированным классом аргументов.

Параметры

it, x, y - итераторы
n - позиция относительно текущего положения

Возвращаемое значение

Как описано выше.

Пример

См. также

operator++operator++(int)operator--operator--(int)operator+=operator-=
увеличивает или уменьшает базовый итератор
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/concat_view/iterator/operator_arith2

Spec-Zone.ru

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