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_ |
內部迭代器 (僅用於闡釋的成員物件*) |
[編輯] 成員函式
構造一個迭代器 (公開成員函式) | |
訪問元素 (公開成員函式) | |
前進或後退底層迭代器 (public member function) |
[編輯] 非成員函式
(C++23) |
比較底層迭代器 (函式) |
(C++23) |
將底層迭代器解引用的結果轉換為其關聯的右值引用型別 (函式) |
(C++23) |
交換兩個底層迭代器指向的物件 (函式) |