Spec-Zone.ru › C++

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)
1) Выполняет инициализацию нестатических полей данных значениями по умолчанию, заданными их инициализаторами, то есть
  • 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;.
2) Инициализирует нестатические поля данных:
  • 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API