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
是由 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< |
[编辑] 确定迭代器概念
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) |
交换两个底层迭代器指向的对象 (函数) |