std::ranges::join_with_view<V,Pattern>::iterator
< 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>,
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)
|
将解引用底层迭代器的结果转型到它关联的右值引用类型 (函数) |
|
(C++23)
|
交换两个底层迭代器所指向的对象 (函数) |