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>,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) |
交換兩個底層迭代器指向的物件 (函式) |