std::ranges::join_with_view<V,Pattern>::iterator
来自cppreference.com
< cpp | ranges | join with view
template< bool Const > class /*iterator*/ |
(仅用于阐述*) | |
ranges::join_with_view<V, Pattern>::iterator
是 ranges::join_with_view<V, Pattern> 的 begin()
和 end()
返回的迭代器的类型。
此类型的迭代器的状态如同包含两个嵌套迭代器:
- 指向父范围 *
parent_
中的外部迭代器
- 如果
Base
实现了forward_range
,那么它是outer_it_
。 - 否则它是
parent_
.outer_it_
。
- 如果
此迭代器类具有在外部迭代器可解引用时内部迭代器也保证可解引用的不变式。在构造、自增或自减迭代器时可能会调整外部迭代器以保持不变式。
模板形参
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
>,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) |
将解引用底层迭代器的结果转型到它关联的右值引用类型 (函数) |
(C++23) |
交换两个底层迭代器所指向的对象 (函数) |