4.7 KiB
[move.iterator]
24 Iterators library [iterators]
24.5 Iterator adaptors [predef.iterators]
24.5.4 Move iterators and sentinels [move.iterators]
24.5.4.2 Class template move_iterator [move.iterator]
namespace std {templateclass move_iterator {public:using iterator_type = Iterator; using iterator_concept = see below; using iterator_category = see below; // not always presentusing value_type = iter_value_t; using difference_type = iter_difference_t; using pointer = Iterator; using reference = iter_rvalue_reference_t; constexpr move_iterator(); constexpr explicit move_iterator(Iterator i); template constexpr move_iterator(const move_iterator& u); template constexpr move_iterator& operator=(const move_iterator& u); constexpr const Iterator& base() const & noexcept; constexpr Iterator base() &&; constexpr reference operator*() const; constexpr move_iterator& operator++(); constexpr auto operator++(int); constexpr move_iterator& operator--(); constexpr move_iterator operator--(int); constexpr move_iterator operator+(difference_type n) const; constexpr move_iterator& operator+=(difference_type n); constexpr move_iterator operator-(difference_type n) const; constexpr move_iterator& operator-=(difference_type n); constexpr reference operator[](difference_type n) const; template<sentinel_for S>friend constexpr booloperator==(const move_iterator& x, const move_sentinel& y); template<sized_sentinel_for S>friend constexpr iter_difference_toperator-(const move_sentinel& x, const move_iterator& y); template<sized_sentinel_for S>friend constexpr iter_difference_toperator-(const move_iterator& x, const move_sentinel& y); friend constexpr iter_rvalue_reference_t iter_move(const move_iterator& i)noexcept(noexcept(ranges::iter_move(i.current))); template<indirectly_swappable Iterator2>friend constexpr void iter_swap(const move_iterator& x, const move_iterator& y)noexcept(noexcept(ranges::iter_swap(x.current, y.current))); private: Iterator current; // exposition only};}
The member typedef-name iterator_concept is defined as follows:
-
If Iterator models random_access_iterator, then iterator_concept denotes random_access_iterator_tag.
-
Otherwise, if Iterator models bidirectional_iterator, then iterator_concept denotes bidirectional_iterator_tag.
-
Otherwise, if Iterator models forward_iterator, then iterator_concept denotes forward_iterator_tag.
-
Otherwise, iterator_concept denotes input_iterator_tag.
The member typedef-name iterator_category is defined if and only if the qualified-iditerator_traits::iterator_category is valid and denotes a type.
In that case, iterator_category denotes
random_access_iterator_tag if the typeiterator_traits<Iterator>::iterator_category modelsderived_from<random_access_iterator_tag>, and
iterator_traits<Iterator>::iterator_category otherwise.