std::ranges::concat_view<Views...>::iterator
From cppreference.com
< cpp | ranges | concat view
template< bool Const > class /*iterator*/ |
(1) | (説明用*) |
| ヘルパーコンセプト |
||
template< bool Const, class... Rs > concept /*concat-is-random-access*/ = /* see description */; |
(2) | (説明用*) |
template< bool Const, class... Rs > concept /*concat-is-bidirectional*/ = /* see description */; |
(3) | (説明用*) |
1) ranges::concat_view<Views...>::
iterator は、ranges::concat_view<Views...> の begin() および end() によって返されるイテレータの型です。2)
Fs を、Rs の最後の要素を除くすべての要素からなるパックとする。これは以下と同等です。template<bool Const, class... Rs>
concept concat-is-random-access = // exposition only
all-random-access <Const, Rs...> &&
(ranges::common_range<maybe-const <Const, Fs>> && ...);
3)
Fs を、Rs の最後の要素を除くすべての要素からなるパックとする。これは以下と同等です。template<bool Const, class... Rs>
concept concat-is-bidirectional = // exposition only
all-bidirectional <Const, Rs...> &&
(ranges::common_range<maybe-const <Const, Fs>> && ...);
目次 |
[edit] Template parameters
| Const | - | イテレータが定数イテレータであるかどうか |
[edit] Nested types
公開専用型 | |
| 型 | 定義 |
base-iter |
std::variant<ranges::iterator_t<maybe-const <Const, Views>>...>(説明専用メンバ型*) |
イテレータプロパティ型 | |
| 型 | 定義 |
iterator_concept
|
イテレータタグ、下記参照 |
iterator_category(条件付きで存在) |
イテレータタグ、下記参照 |
value_type
|
concat-value-t <maybe-const <Const, Views>...> |
difference_type
|
std::common_type_t<ranges::range_difference_t< |
[edit] Determining the iterator concept
iterator_concept は以下のように定義されます。
concat-is-random-access<Const, Views...> がモデル化されている場合、iterator_conceptは std::random_access_iterator_tag を示します。- それ以外の場合で、
concat-is-bidirectional<Const, Views...> がモデル化されている場合、iterator_conceptは std::bidirectional_iterator_tag を示します。 - それ以外の場合で、
all-forward<Const, Views...> がモデル化されている場合、iterator_conceptは std::forward_iterator_tag を示します。 - それ以外の場合、
iterator_conceptは std::input_iterator_tag を指します。
[edit] Determining the iterator category
iterator_category は、all-forward <Const, Views...> がモデル化されている場合にのみ定義されます。その場合、以下のように定義されます。
- std::is_reference_v<
concat-reference-t<maybe-const<Const, Views>...>> が false の場合、iterator_categoryは std::input_iterator_tag を示します。 - それ以外の場合、
Csを型パック std::iterator_traits<ranges::iterator_t<maybe-const<Const, Views>>>::iterator_category... とします。- もし (std::derived_from<Cs, std::random_access_iterator_tag> && ...) &&
concat-is-random-access<Const, Views...> が true ならば、iterator_categoryは std::random_access_iterator_tag を示します。 - それ以外の場合で、もし (std::derived_from<Cs, std::bidirectional_iterator_tag> && ...) &&
concat-is-bidirectional<Const, Views...> が true ならば、iterator_categoryは std::bidirectional_iterator_tag を示します。 - それ以外の場合で、もし (std::derived_from<Cs, std::forward_iterator_tag> && ...) が true ならば、
iterator_categoryは std::forward_iterator_tag を示します。 - それ以外の場合、
iterator_categoryは std::input_iterator_tag を示します。
- もし (std::derived_from<Cs, std::random_access_iterator_tag> && ...) &&
[edit] Data members
| メンバ | 定義 |
maybe-const <Const, ranges::concat_view>* parent_ |
親の concat_view へのポインタ(説明用のメンバオブジェクト*) |
base-iter it_ |
現在のビュー内のイテレータ (説明用のメンバオブジェクト*) |
[edit] Member functions
| イテレータを構築する (public member function) | |
| 要素にアクセスします (public member function) | |
| インデックスで要素にアクセスする (public member function) | |
| 基底イテレータを進めたり、後退させたりします。 (public member function) | |
Exposition-only function templates | |
it_ が現在のビューの終端である場合、次のビューの先頭に it_ を置き換えます。(説明専用メンバ関数*) | |
it_ をデクリメントして、前の位置を指すようにします。(説明専用メンバ関数*) | |
| 指定されたオフセットで現在の位置を進めます。 (説明専用メンバ関数*) | |
| 指定された値で現在の位置をデクリメントします。 (説明専用メンバ関数*) | |
[edit] Non-member functions
| 基底イテレータを比較する (関数) | |
| (C++26) |
イテレータの算術演算を実行します。 (関数) |
| (C++26) |
基底イテレータの間接参照の結果を関連する右辺値参照型にキャストする (関数) |
| (C++26) |
2つの基底イテレータが指すオブジェクトをスワップする (関数) |
[edit] Example
予備的なバージョンは Compiler Explorer で確認できます。
このコードを実行
#include <iostream> #include <iterator> #include <ranges> int main() { namespace views = std::views; static constexpr int p[]{1, 2, 3}; static constexpr auto e = {4, 5}; auto t = views::iota(6, 9); auto cat = views::concat(p, e, t); auto dog = views::concat(cat, cat); for (auto i{dog.begin()}; i != std::default_sentinel; ++i) std::cout << *i << ' '; std::cout << '\n'; }
出力
1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
[edit] References
- C++26 標準 (ISO/IEC 14882:2026)
- 26.7.18.3 Class template
concat_view::iterator[range.concat.iterator]
- 26.7.18.3 Class template