Files
cppdraft_translate/cppdraft/move/iterator.md
2025-10-25 03:02:53 +03:00

4.7 KiB
Raw Blame History

[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};}

1

#

The member typedef-name iterator_concept is defined as follows:

2

#

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.