std::ranges::split_view<V,Pattern>::iterator
class /*iterator*/; |
(начиная с C++20) (только для экспозиции*) |
Тип, возвращаемый split_view::begin. Это forward_iterator, поэтому ожидается, что V моделирует как минимум forward_range.
Типы-члены
| Тип-член | Определение |
|---|---|
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> |
Поля данных
| Поле | Описание |
|---|---|
ranges::split_view<V,Pattern>* parent_ (private) | указатель на родительский объект split_view(поле объекта, используемое только для экспозиции*) |
ranges::iterator_t<V> cur_ (private) | итератор в базовом view, указывающий на начало текущего поддиапазона(поле объекта, используемое только для экспозиции*) |
ranges::subrange<ranges::iterator_t<V>> next_ (private) | поддиапазон до позиции шаблона, следующего за текущим поддиапазоном (поле объекта, используемое только для экспозиции*) |
bool trailing_empty_ (private) | флаг, указывающий, достигнут ли пустой завершающий поддиапазон (если он есть) (поле объекта, используемое только для экспозиции*) |
Функции-члены
|
(конструктор)
(C++20) | создаёт итератор (открытая функция-член) |
|
base
(C++20) | возвращает базовый итератор (открытая функция-член) |
|
operator*
(C++20) | возвращает текущий поддиапазон (открытая функция-член) |
|
operator++operator++(int)
(C++20) | перемещает итератор вперёд (открытая функция-член) |
std::ranges::split_view::iterator::iterator
/*iterator*/() = default; | (1) | (начиная с C++20) |
constexpr /*iterator*/( split_view& parent, ranges::iterator_t<V> current,
ranges::subrange<ranges::iterator_t<V>> next );
| (2) | (начиная с 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>>();-
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);-
bool trailing_empty_ = false;.
std::ranges::split_view::iterator::base
constexpr const ranges::iterator_t<V> base() const; | (начиная с C++20) |
Эквивалентно return cur_;.
std::ranges::split_view::iterator::operator*
constexpr value_type operator*() const; | (начиная с C++20) |
Эквивалентно return {cur_, next_.begin()};.
std::ranges::split_view::iterator::operator++
constexpr /*iterator*/& operator++(); | (1) | (начиная с C++20) |
constexpr void operator++( int ); | (2) | (начиная с C++20) |
1) Эквивалентно:
if (cur_ = next_.begin(); 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;
2) Эквивалентно
auto tmp = *this; ++*this; return tmp;. Функции, не являющиеся членами
|
operator==
(C++20) | сравнивает базовые итераторы (функция) |
operator==(std::ranges::split_view::iterator, std::ranges::split_view::iterator)
friend constexpr bool operator==( const /*iterator*/& x, const /*iterator*/& y ); | (начиная с C++20) |
Эквивалентно return x.cur_ == y.cur_ and x.trailing_empty_ == y.trailing_empty_;.
Оператор != синтезируется из operator==.
Эта функция не видна при обычном неквалифицированном или квалифицированном поиске; её можно найти только с помощью поиска, зависящего от аргументов, если std::ranges::split_view::iterator является ассоциированным классом аргументов.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/split_view/iterator