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) |
Увеличивает или уменьшает итератор.
auto t = it; t += n; return t;.return it + n;.auto t = it; t -= n; return t;.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, поведение не определено.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, поведение не определено.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 | - | позиция относительно текущего положения |
Возвращаемое значение
Как описано выше.
Пример
См. также
| увеличивает или уменьшает базовый итератор (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/concat_view/iterator/operator_arith2