std::ranges::lazy_split_view<V, Pattern>::inner_iterator
template< bool Const > struct /*inner_iterator*/; |
(C++20以降) (説明用*) |
|
The return type of lazy_split_view::outer_iterator::value_type::begin()。
Const matches the template argument of outer_iterator.
[edit] メンバ型
| メンバ | 定義 |
Base
|
maybe_const <Const, V>(説明専用メンバ型*) |
iterator_concept
|
|
iterator_category(条件付きで存在) |
|
value_type
|
ranges::range_value_t<Base> |
difference_type
|
ranges::range_difference_t<Base> |
[edit] データメンバ
| メンバ | 説明 |
outer_iterator<Const> i_ (private) |
親オブジェクト lazy_split_view の基底 view へのイテレータ。(説明用のメンバオブジェクト*) |
bool incremented_ (private) |
operator++ がこのオブジェクトに対して少なくとも一度呼び出されたかどうかを示すフラグ。 (説明用のメンバオブジェクト*) |
[edit] メンバ関数
| (コンストラクタ) (C++20) |
イテレータを構築する (public member function) |
| base (C++20) |
基盤となるイテレータを返します。 (public member function) |
| operator* (C++20) |
現在の要素にアクセスします。 (public member function) |
| operator++operator++(int) (C++20) |
イテレータを進める (public member function) |
[edit] メンバ関数
std::ranges::lazy_split_view::inner_iterator::inner_iterator
| /*inner_iterator*/() = default; |
(1) | (C++20以降) |
| constexpr explicit /*inner_iterator*/( /*outer_iterator*/<Const> i ); |
(2) | (C++20以降) |
データメンバ incremented_ はデフォルトメンバ初期化子を false で初期化されます。
std::ranges::lazy_split_view::inner_iterator::base
| constexpr const ranges::iterator_t<Base>& base() const & noexcept; |
(1) | (C++20以降) |
| constexpr ranges::iterator_t<Base> base() && requires ranges::forward_range<V>; |
(2) | (C++20以降) |
基底イテレータのコピーを返します。
std::ranges::lazy_split_view::inner_iterator::operator*
| constexpr decltype(auto) operator*() const; |
(C++20以降) | |
基底イテレータが指す要素を返します。
return *i_./*cur*/(); に相当します。
std::ranges::lazy_split_view::inner_iterator::operator++
| constexpr /*inner_iterator*/& operator++(); |
(1) | (C++20以降) |
| constexpr decltype(auto) operator++(int); |
(2) | (C++20以降) |
incremented_ = true;
if constexpr (!ranges::forward_range<Base>)
{
if constexpr (Pattern::size() == 0)
return *this;
}
++i_./*cur*/();
if constexpr (ranges::forward_range<Base>)
{
auto tmp = *this;
++*this;
return tmp;
}
else
++*this; // return 文はありません
[edit] 非メンバ関数
| operator== (C++20) |
イテレータまたはイテレータと std::default_sentinel を比較します。 (関数) |
| iter_move (C++20) |
基底イテレータの間接参照の結果を関連する右辺値参照型にキャストする (関数) |
| iter_swap (C++20) |
2つの基底イテレータが指すオブジェクトをスワップする (関数) |
operator==(std::ranges::split_view::inner_iterator)
| friend constexpr bool operator==( const /*inner_iterator*/& x, const /*inner_iterator*/& y ) |
(1) | (C++20以降) |
| friend constexpr bool operator==( const /*inner_iterator*/& x, std::default_sentinel_t ); |
(2) | (C++20以降) |
auto [pcur, pend] = ranges::subrange{x.i_.parent_->pattern_}; auto end = ranges::end(x.i_.parent_->base_); if constexpr (/*tiny_range*/<Pattern>) { const auto& cur = x.i_./*cur*/(); if (cur == end) return true; if (pcur == pend) return x.incremented_; return *cur == *pcur; } else { auto cur = x.i_./*cur*/(); if (cur == end) return true; if (pcur == pend) return x.incremented_; do { if (*cur != *pcur) return false; if (++pcur == pend) return true; } while (++cur != end); return false; }
!= 演算子は operator== から合成される。
これらの関数は通常の 非修飾または 修飾ルックアップでは見えず、std::ranges::split_view::inner_iterator が引数に関連付けられたクラスである場合にのみ、引数依存ルックアップによって見つけることができます。
iter_move(std::ranges::split_view::inner_iterator)
| friend constexpr decltype(auto) iter_move( const /*inner_iterator*/& i ) noexcept(noexcept(ranges::iter_move(i.i_./*cur*/()))); |
(C++20以降) | |
return ranges::iter_move(i.i_./*cur*/()); に相当します。
この関数は通常の 非修飾または 修飾ルックアップでは見えず、std::ranges::split_view::inner_iterator が引数に関連付けられたクラスである場合にのみ、引数依存ルックアップによって見つけることができます。
iter_swap(std::ranges::split_view::inner_iterator)
| friend constexpr void iter_swap( const /*inner_iterator*/& x, const /*inner_iterator*/& y ) |
(C++20以降) | |
ranges::iter_swap(x.i_./*cur*/(), y.i_./*cur*/()) に相当します。
この関数は通常の 非修飾または 修飾ルックアップでは見えず、std::ranges::split_view::inner_iterator が引数に関連付けられたクラスである場合にのみ、引数依存ルックアップによって見つけることができます。
[edit] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 3591 | C++20 | base の && オーバーロードは、アウトサイドライテレータを無効にする可能性があります。 |
制約が追加されました。 |
| LWG 3593 | C++20 | base の const& オーバーロードは参照を返しますが、noexcept ではない可能性があります。 |
noexcept に変更されました |