std::ranges::join_with_view<V,Pattern>::iterator
template< bool Const > class /*iterator*/ |
(説明用*) | |
ranges::join_with_view<V, Pattern>::iterator は、ranges::join_with_view<V, Pattern> の begin() および end() によって返されるイテレータの型です。
このクラスのイテレータの状態は、2つのネストされたイテレータがあるかのように管理されます。
- 親レンジへのアウトサイダイテレータ *
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) | |
| 要素にアクセスします (public member function) | |
| 基底イテレータを進めたり、後退させたりします。 (public member function) |
[編集] 非メンバ関数
| (C++23) |
基底イテレータを比較する (関数) |
| (C++23) |
基底イテレータの間接参照の結果を関連する右辺値参照型にキャストする (関数) |
| (C++23) |
2つの基底イテレータが指すオブジェクトをスワップする (関数) |