Files
2025-10-25 03:02:53 +03:00

7.8 KiB
Raw Permalink Blame History

[range.repeat.iterator]

25 Ranges library [ranges]

25.6 Range factories [range.factories]

25.6.5 Repeat view [range.repeat]

25.6.5.3 Class repeat_view::iterator [range.repeat.iterator]

🔗

namespace std::ranges {template<move_constructible T, semiregular Bound>requires (is_object_v && same_as<T, remove_cv_t> &&(integer-like-with-usable-difference-type ||same_as<Bound, unreachable_sentinel_t>))class repeat_view<T, Bound>::iterator {private:using index-type = // exposition only conditional_t<same_as<Bound, unreachable_sentinel_t>, ptrdiff_t, Bound>; const T* value_ = nullptr; // exposition only**index-type current_ = index-type(); // exposition onlyconstexpr explicit iterator(const T* value, index-type b = index-type()); // exposition onlypublic:using iterator_concept = random_access_iterator_tag; using iterator_category = random_access_iterator_tag; using value_type = T; using difference_type = see below; iterator() = default; constexpr const T& operator*() const noexcept; constexpr iterator& operator++(); constexpr iterator operator++(int); constexpr iterator& operator--(); constexpr iterator operator--(int); constexpr iterator& operator+=(difference_type n); constexpr iterator& operator-=(difference_type n); constexpr const T& operator[](difference_type n) const noexcept; friend constexpr bool operator==(const iterator& x, const iterator& y); friend constexpr auto operator<=>(const iterator& x, const iterator& y); friend constexpr iterator operator+(iterator i, difference_type n); friend constexpr iterator operator+(difference_type n, iterator i); friend constexpr iterator operator-(iterator i, difference_type n); friend constexpr difference_type operator-(const iterator& x, const iterator& y); };}

1

#

If is-signed-integer-like<index-type> is true, the member typedef-name difference_type denotes index-type.

Otherwise, it denotes IOTA-DIFF-T(index-type) ([range.iota.view]).

🔗

constexpr explicit iterator(const T* value, index-type b = index-type());

2

#

Preconditions: If Bound is not unreachable_sentinel_t, b ≥ 0.

3

#

Effects: Initializes value_ with value andcurrent_ with b.

🔗

constexpr const T& operator*() const noexcept;

4

#

Effects: Equivalent to: return **value_*;

🔗

constexpr iterator& operator++();

5

#

Effects: Equivalent to:++current_;return *this;

🔗

constexpr iterator operator++(int);

6

#

Effects: Equivalent to:auto tmp = *this;++*this;return tmp;

🔗

constexpr iterator& operator--();

7

#

Preconditions: If Bound is not unreachable_sentinel_t,current_>0.

8

#

Effects: Equivalent to:--current_;return *this;

🔗

constexpr iterator operator--(int);

9

#

Effects: Equivalent to:auto tmp = *this;--*this;return tmp;

🔗

constexpr iterator& operator+=(difference_type n);

10

#

Preconditions: If Bound is not unreachable_sentinel_t,current_+n≥0.

11

#

Effects: Equivalent to:current_ += n;return *this;

🔗

constexpr iterator& operator-=(difference_type n);

12

#

Preconditions: If Bound is not unreachable_sentinel_t,current_−‰¥0.

13

#

Effects: Equivalent to:current_ -= n;return *this;

🔗

constexpr const T& operator[](difference_type n) const noexcept;

14

#

Effects: Equivalent to: return *(*this + n);

🔗

friend constexpr bool operator==(const iterator& x, const iterator& y);

15

#

Effects: Equivalent to: return x.current_ == y.current_;

🔗

friend constexpr auto operator<=>(const iterator& x, const iterator& y);

16

#

Effects: Equivalent to: return x.current_ <=> y.current_;

🔗

friend constexpr iterator operator+(iterator i, difference_type n); friend constexpr iterator operator+(difference_type n, iterator i);

17

#

Effects: Equivalent to:i += n;return i;

🔗

friend constexpr iterator operator-(iterator i, difference_type n);

18

#

Effects: Equivalent to:i -= n;return i;

🔗

friend constexpr difference_type operator-(const iterator& x, const iterator& y);

19

#

Effects: Equivalent to:return static_cast<difference_type>(x.current_) - static_cast<difference_type>(y.current_);