std::ranges::join_with_view<V,Pattern>::iterator
来自 cppreference.cn
< 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_ |
内部迭代器 (仅用于阐释的成员对象*) |
[编辑] 成员函数
| 构造一个迭代器 (公开成员函数) | |
| 访问元素 (公开成员函数) | |
| 前进或后退底层迭代器 (public member function) |
[编辑] 非成员函数
| (C++23) |
比较底层迭代器 (函数) |
| (C++23) |
将底层迭代器解引用的结果转换为其关联的右值引用类型 (函数) |
| (C++23) |
交换两个底层迭代器指向的对象 (函数) |