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< |
difference_type | std::common_type_t<ranges::range_difference_t< |
Определение концепции итератора
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_ | внутренний итератор (поле-объект, используемое только для экспозиции*) |
Функции-члены
| создаёт итератор (открытая функция-член) |
|
| получает доступ к элементу (открытая функция-член) |
|
| перемещает базовый итератор вперёд или назад (открытая функция-член) |
Функции, не являющиеся членами
|
(C++23) | сравнивает базовые итераторы (функция) |
|
(C++23) | приводит результат разыменования базового итератора к соответствующему типу rvalue-ссылки (функция) |
|
(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