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

6.6 KiB
Raw Permalink Blame History

[counted.iter.nav]

24 Iterators library [iterators]

24.5 Iterator adaptors [predef.iterators]

24.5.7 Counted iterators [iterators.counted]

24.5.7.5 Navigation [counted.iter.nav]

🔗

constexpr counted_iterator& operator++();

1

#

Hardened preconditions: length > 0 is true.

2

#

Effects: Equivalent to:++current;--length;return *this;

🔗

constexpr decltype(auto) operator++(int);

3

#

Hardened preconditions: length > 0 is true.

4

#

Effects: Equivalent to:--length;try { return current++; }catch(...) { ++length; throw; }

🔗

constexpr counted_iterator operator++(int) requires [forward_iterator](iterator.concept.forward#concept:forward_iterator "24.3.4.11Concept forward_­iterator[iterator.concept.forward]")<I>;

5

#

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

🔗

constexpr counted_iterator& operator--() requires [bidirectional_iterator](iterator.concept.bidir#concept:bidirectional_iterator "24.3.4.12Concept bidirectional_­iterator[iterator.concept.bidir]")<I>;

6

#

Effects: Equivalent to:--current;++length;return *this;

🔗

constexpr counted_iterator operator--(int) requires [bidirectional_iterator](iterator.concept.bidir#concept:bidirectional_iterator "24.3.4.12Concept bidirectional_­iterator[iterator.concept.bidir]")<I>;

7

#

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

🔗

constexpr counted_iterator operator+(iter_difference_t<I> n) const requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;

8

#

Effects: Equivalent to: return counted_iterator(current + n, length - n);

🔗

friend constexpr counted_iterator operator+( iter_difference_t<I> n, const counted_iterator& x) requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;

9

#

Effects: Equivalent to: return x + n;

🔗

constexpr counted_iterator& operator+=(iter_difference_t<I> n) requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;

10

#

Hardened preconditions: n <= length is true.

11

#

Effects: Equivalent to:current += n; length -= n;return *this;

🔗

constexpr counted_iterator operator-(iter_difference_t<I> n) const requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;

12

#

Effects: Equivalent to: return counted_iterator(current - n, length + n);

🔗

template<[common_with](concept.common#concept:common_with "18.4.6Concept common_­with[concept.common]")<I> I2> friend constexpr iter_difference_t<I2> operator-( const counted_iterator& x, const counted_iterator<I2>& y);

13

#

Preconditions: x and y refer to elements of the same sequence ([counted.iterator]).

14

#

Effects: Equivalent to: return y.length - x.length;

🔗

friend constexpr iter_difference_t<I> operator-( const counted_iterator& x, default_sentinel_t) noexcept;

15

#

Effects: Equivalent to:return -x.length;

🔗

friend constexpr iter_difference_t<I> operator-( default_sentinel_t, const counted_iterator& y) noexcept;

16

#

Effects: Equivalent to: return y.length;

🔗

constexpr counted_iterator& operator-=(iter_difference_t<I> n) requires [random_access_iterator](iterator.concept.random.access#concept:random_access_iterator "24.3.4.13Concept random_­access_­iterator[iterator.concept.random.access]")<I>;

17

#

Hardened preconditions: -n <= length is true.

18

#

Effects: Equivalent to:current -= n; length += n;return *this;