class /*iterator*/; // exposition only | (since C++20) |
The return type of split_view::begin. The name iterator is for exposition purposes only.
This is a forward_iterator, so it is expected that V models at least forward_range.
| Member type | Definition |
|---|---|
iterator_concept | std::forward_iterator_tag |
iterator_category | std::input_iterator_tag |
value_type | ranges::subrange<ranges::iterator_t<V>> |
difference_type | ranges::range_difference_t<V> |
Typical implementations of iterator hold four non-static data members:
ranges::split_view<V, Pattern>* to the parent split_view object (shown here as parent_ for exposition only), ranges::iterator_t<V> (shown here as cur_ for exposition only) into the underlying view; cur_ points to the begin of a current subrange, ranges::subrange<ranges::iterator_t<V>> (shown here as next_ for exposition only) to the position of the pattern next to the current subrange, and trailing_empty_ for exposition only) that indicates whether an empty trailing subrange (if any) was reached. | (constructor)
(C++20) | constructs an iterator (public member function) |
| base
(C++20) | returns the underlying iterator (public member function) |
| operator*
(C++20) | returns the current subrange (public member function) |
| operator++operator++(int)
(C++20) | advances the iterator (public member function) |
/*iterator*/() = default; | (1) | (since C++20) |
constexpr /*iterator*/( split_view& parent, ranges::iterator_t<V> current,
ranges::subrange<ranges::iterator_t<V>> next );
| (2) | (since C++20) |
ranges::split_view* parent_ = nullptr;, ranges::iterator_t<V> cur_ = ranges::iterator_t<V>();, ranges::subrange<ranges::iterator_t<V>> next_ = ranges::subrange<ranges::iterator_t<V>>();, and bool trailing_empty_ = false;.ranges::split_view* parent_ = std::addressof(parent);, ranges::iterator_t<V> cur_ = std::move(current);, ranges::subrange<ranges::iterator_t<V>> next_ = std::move(next);, and bool trailing_empty_ = false;. constexpr const ranges::iterator_t<V> base() const; | (since C++20) |
Equivalent to return cur_;.
constexpr ranges::range_reference_t<V> operator*() const; | (since C++20) |
Equivalent to return {cur_, next_.begin()};.
constexpr /*iterator*/& operator++(); | (1) | (since C++20) |
constexpr void operator++( int ); | (2) | (since C++20) |
cur_ = next_.begin();
if (cur_ != ranges::end(parent_->base_))
{
if (cur_ = next_.end(); cur_ == ranges::end(parent_->base_))
{
trailing_empty_ = true;
next_ = {cur_, cur_};
}
else
next_ = parent_->find_next(cur_);
}
else
trailing_empty_ = false;
return *this;
auto tmp = *this; ++*this; return tmp;. | operator==
(C++20) | compares the underlying iterators (function) |
friend constexpr bool operator==( const /*iterator*/& x, const /*iterator*/& y ); | (since C++20) |
Equivalent to return x.cur_ == y.cur_ and x.trailing_empty_ == y.trailing_empty_;.
The != operator is synthesized from operator==.
This function is not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::ranges::split_view::iterator is an associated class of the arguments.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/split_view/iterator