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 iterator
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.
-
std::
is_reference_v
<
-
Иначе, если выполняются все следующие условия,
iterator_conceptобозначает std::forward_iterator_tag :-
std::
is_reference_v
<
InnerBase > равно true . -
BaseиInnerBaseоба моделируютforward_range.
-
std::
is_reference_v
<
-
В противном случае,
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)
|
обменивает объекты, на которые указывают два базовых итератора
(функция) |