88 lines
3.1 KiB
Markdown
88 lines
3.1 KiB
Markdown
[move.iter.nonmember]
|
||
|
||
# 24 Iterators library [[iterators]](./#iterators)
|
||
|
||
## 24.5 Iterator adaptors [[predef.iterators]](predef.iterators#move.iter.nonmember)
|
||
|
||
### 24.5.4 Move iterators and sentinels [[move.iterators]](move.iterators#move.iter.nonmember)
|
||
|
||
#### 24.5.4.9 Non-member functions [move.iter.nonmember]
|
||
|
||
[ð](#lib:operator-,move_iterator)
|
||
|
||
`template<class Iterator1, class Iterator2>
|
||
constexpr auto operator-(
|
||
const move_iterator<Iterator1>& x, const move_iterator<Iterator2>& y)
|
||
-> decltype(x.base() - y.base());
|
||
template<[sized_sentinel_for](iterator.concept.sizedsentinel#concept:sized_sentinel_for "24.3.4.8 Concept sized_sentinel_for [iterator.concept.sizedsentinel]")<Iterator> S>
|
||
friend constexpr iter_difference_t<Iterator>
|
||
operator-(const move_sentinel<S>& x, const move_iterator& y);
|
||
template<[sized_sentinel_for](iterator.concept.sizedsentinel#concept:sized_sentinel_for "24.3.4.8 Concept sized_sentinel_for [iterator.concept.sizedsentinel]")<Iterator> S>
|
||
friend constexpr iter_difference_t<Iterator>
|
||
operator-(const move_iterator& x, const move_sentinel<S>& y);
|
||
`
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5238)
|
||
|
||
*Returns*: x.base() - y.base()[.](#1.sentence-1)
|
||
|
||
[ð](#lib:operator+,move_iterator)
|
||
|
||
`template<class Iterator>
|
||
constexpr move_iterator<Iterator>
|
||
operator+(iter_difference_t<Iterator> n, const move_iterator<Iterator>& x);
|
||
`
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5251)
|
||
|
||
*Constraints*: x.base() + n is well-formed and has type Iterator[.](#2.sentence-1)
|
||
|
||
[3](#3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5255)
|
||
|
||
*Returns*: x + n[.](#3.sentence-1)
|
||
|
||
[ð](#lib:iter_move,move_iterator)
|
||
|
||
`friend constexpr iter_rvalue_reference_t<Iterator>
|
||
iter_move(const move_iterator& i)
|
||
noexcept(noexcept(ranges::iter_move(i.current)));
|
||
`
|
||
|
||
[4](#4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5268)
|
||
|
||
*Effects*: Equivalent to: return ranges::iter_move(i.current);
|
||
|
||
[ð](#lib:iter_swap,move_iterator)
|
||
|
||
`template<[indirectly_swappable](alg.req.ind.swap#concept:indirectly_swappable "24.3.7.4 Concept indirectly_swappable [alg.req.ind.swap]")<Iterator> Iterator2>
|
||
friend constexpr void
|
||
iter_swap(const move_iterator& x, const move_iterator<Iterator2>& y)
|
||
noexcept(noexcept(ranges::iter_swap(x.current, y.current)));
|
||
`
|
||
|
||
[5](#5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5282)
|
||
|
||
*Effects*: Equivalent to: ranges::iter_swap(x.current, y.current)[.](#5.sentence-1)
|
||
|
||
[ð](#lib:make_move_iterator)
|
||
|
||
`template<class Iterator>
|
||
constexpr move_iterator<Iterator> make_move_iterator(Iterator i);
|
||
`
|
||
|
||
[6](#6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iterators.tex#L5294)
|
||
|
||
*Returns*: move_iterator<Iterator>(std::move(i))[.](#6.sentence-1)
|