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
是 begin()
和 end()
返回的迭代器类型 ranges::join_with_view<V, Pattern>.
此类迭代器的状态以如下方式管理,好像有两个嵌套迭代器
- 一个指向父范围的 外部迭代器 *
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< |
[edit] 确定迭代器概念
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.
[edit] 确定迭代器类别
给定以下类型
- 令
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.
[edit] 数据成员
成员 | 描述 |
Parent * parent_ |
指向父 join_with_view 的指针(仅供说明*成员对象) |
OuterIter outer_it_ (仅当 Base 符合 forward_range 模型时存在)
|
外部迭代器 (仅供说明*成员对象) |
std::variant<PatternIter , InnerIter > inner_it_ |
内部迭代器 (仅供说明*成员对象) |
[edit] 成员函数
构造一个迭代器 (公有成员函数) | |
访问元素 (公有成员函数) | |
推进或倒退底层迭代器 (公有成员函数) |
[edit] 非成员函数
(C++23) |
比较底层迭代器 (函数) |
(C++23) |
将底层迭代器解引用结果转换为其关联的右值引用类型 (函数) |
(C++23) |
交换两个底层迭代器指向的对象 (函数) |