Spec-Zone.ru › C++

std::ranges::join_with_view<V,Pattern>::iterator

template< bool Const >
class /*iterator*/
(только для экспозиции*)

ranges::join_with_view<V,Pattern>::iterator — это тип итераторов, возвращаемых функциями begin() и end() класса ranges::join_with_view<V,Pattern>.

Состояние итератора этого класса управляется так, как если бы существовали два вложенных итератора:

  • внешний итератор в родительском диапазоне *parent_
    • Если Base удовлетворяет требованиям forward_range, то он является outer_it_.
    • В противном случае он является parent_ ->outer_it_.
  • внутренний итератор inner_it_ в диапазоне шаблона parent_ ->pattern_ или в дочернем диапазоне родительского диапазона

Для этого класса итераторов выполняется инвариант: внутренний итератор всегда допускает разыменование, если внешний итератор допускает разыменование. При конструировании, инкрементировании или декрементировании итератора его внешний итератор может быть скорректирован для соблюдения этого инварианта.

Параметры шаблона

Const - является ли итератор константным итератором

Вложенные типы

Типы, используемые только для экспозиции
Тип Определение
Parent maybe-const <Const,ranges::join_with_view<V,Pattern>>
(тип-член, используемый только для экспозиции*)
Base maybe-const <Const,V>
(тип-член, используемый только для экспозиции*)
InnerBase ranges::range_reference_t<Base >
(тип-член, используемый только для экспозиции*)
PatternBase maybe-const <Const,Pattern>
(тип-член, используемый только для экспозиции*)
OuterIter ranges::iterator_t<Base >
(тип-член, используемый только для экспозиции*)
InnerIter ranges::iterator_t<InnerBase >
(тип-член, используемый только для экспозиции*)
PatternIter ranges::iterator_t<PatternBase >
(тип-член, используемый только для экспозиции*)
Типы свойств итератора
Тип Определение
iterator_concept тег итератора, см. ниже
iterator_category
(присутствует при определённых условиях)
тег итератора, см. ниже
value_type

std::common_type_t<ranges::range_value_t<InnerBase >,
ranges::range_value_t<PatternBase >>

difference_type

std::common_type_t<ranges::range_difference_t<Base >,
ranges::range_difference_t<InnerBase >,
ranges::range_difference_t<PatternBase >>

Определение концепции итератора

iterator_concept определяется следующим образом:

  • Если выполняются все следующие условия, iterator_concept обозначает std::bidirectional_iterator_tag:
    • std::is_reference_v<InnerBase > является true.
    • Base удовлетворяет требованиям bidirectional_range.
    • InnerBase и PatternBase каждый удовлетворяют требованиям common_range.
  • В противном случае, если выполняются все следующие условия, iterator_concept обозначает std::forward_iterator_tag:
    • std::is_reference_v<InnerBase > является true.
    • Base и InnerBase каждый удовлетворяют требованиям forward_range.
  • В противном случае iterator_concept обозначает std::input_iterator_tag.

Определение категории итератора

Пусть заданы следующие типы:

  • Пусть OuterC будет равен std::iterator_traits<OuterIter >::iterator_category.
  • Пусть InnerC будет равен std::iterator_traits<InnerIter >::iterator_category.
  • Пусть PatternC будет равен std::iterator_traits<PatternIter >::iterator_category.

iterator_category определён тогда и только тогда, когда std::is_reference_v<InnerBase > является true, а Base и InnerBase каждый удовлетворяют требованиям forward_range. В этом случае он определяется следующим образом:

  • Если std::is_reference_v<std::common_reference_t<ranges::range_reference_t<InnerBase >,                                            ranges::range_reference_t<PatternBase >> является false, iterator_category обозначает std::input_iterator_tag.
  • В противном случае, если выполняются все следующие условия, iterator_category обозначает std::bidirectional_iterator_tag:
    • OuterC, InnerC и PatternC каждый удовлетворяют требованиям std::derived_from<std::bidirectional_iterator_tag>.
    • InnerBase и PatternBase каждый удовлетворяют требованиям common_range.
  • В противном случае, если OuterC, InnerC и PatternC каждый удовлетворяют требованиям std::derived_from<std::forward_iterator_tag>, iterator_category обозначает std::forward_iterator_tag.
  • В противном случае iterator_category обозначает std::input_iterator_tag.

Поля данных

Член Описание
Parent * parent_ указатель на родительский объект join_with_view
(поле-объект, используемое только для экспозиции*)
OuterIter outer_it_
(присутствует, только если Base удовлетворяет требованиям forward_range)
внешний итератор
(поле-объект, используемое только для экспозиции*)
std::variant<PatternIter ,InnerIter > inner_it_ внутренний итератор
(поле-объект, используемое только для экспозиции*)

Функции-члены

(конструктор)
создаёт итератор
(открытая функция-член)
operator*
получает доступ к элементу
(открытая функция-член)
operator++operator++(int)operator--operator--(int)
перемещает базовый итератор вперёд или назад
(открытая функция-член)

Функции, не являющиеся членами

operator==
(C++23)
сравнивает базовые итераторы
(функция)
iter_move
(C++23)
приводит результат разыменования базового итератора к соответствующему типу rvalue-ссылки
(функция)
iter_swap
(C++23)
обменивает местами объекты, на которые указывают два базовых итератора
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/join_with_view/iterator

Spec-Zone.ru

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