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

3.8 KiB
Raw Permalink Blame History

[range.split.iterator]

25 Ranges library [ranges]

25.7 Range adaptors [range.adaptors]

25.7.17 Split view [range.split]

25.7.17.3 Class split_view::iterator [range.split.iterator]

🔗

namespace std::ranges {template<forward_range V, forward_range Pattern>requires view && view &&indirectly_comparable<iterator_t, iterator_t, ranges::equal_to>class split_view<V, Pattern>::iterator {private: split_view* parent_ = nullptr; // exposition only iterator_t cur_ = iterator_t(); // exposition only subrange<iterator_t> next_ = subrange<iterator_t>(); // exposition onlybool trailing_empty_ = false; // exposition onlypublic:using iterator_concept = forward_iterator_tag; using iterator_category = input_iterator_tag; using value_type = subrange<iterator_t>; using difference_type = range_difference_t; iterator() = default; constexpr iterator(split_view& parent, iterator_t current, subrange<iterator_t> next); constexpr iterator_t base() const; constexpr value_type operator*() const; constexpr iterator& operator++(); constexpr iterator operator++(int); friend constexpr bool operator==(const iterator& x, const iterator& y); };}

🔗

constexpr iterator(split_view& parent, iterator_t<V> current, subrange<iterator_t<V>> next);

1

#

Effects: Initializes parent_ with addressof(parent),cur_ with std::move(current), andnext_ with std::move(next).

🔗

constexpr iterator_t<V> base() const;

2

#

Effects: Equivalent to: return cur_;

🔗

constexpr value_type operator*() const;

3

#

Effects: Equivalent to: return {cur_, next_.begin()};

🔗

constexpr iterator& operator++();

4

#

Effects: Equivalent to:cur_ = next_.begin();if (cur_ != ranges::end(parent_->base_)) {cur_ = next_.end(); if (cur_ == ranges::end(parent_->base_)) {trailing_empty_ = true; next_ = {cur_, cur_}; } else {next_ = parent_->find-next(cur_); }} else {trailing_empty_ = false;}return *this;

🔗

constexpr iterator operator++(int);

5

#

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

🔗

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

6

#

Effects: Equivalent to:return x.cur_ == y.cur_ && x.trailing_empty_ == y.trailing_empty_;