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.
-
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)
|
обменивает объекты, на которые указывают два базовых итератора
(функция) |