std::ranges::split_view<V,Pattern>::iterator
From cppreference.com
< cpp | ranges | split view
class /*iterator*/; |
(C++20以降) (説明用*) |
|
split_view::begin の返り値の型です。これは forward_iterator なので、V が少なくとも forward_range をモデル化することが期待されます。
目次 |
[編集] メンバー型
| メンバ型 | 定義 |
iterator_concept
|
std::forward_iterator_tag |
iterator_category
|
std::input_iterator_tag |
value_type
|
ranges::subrange<ranges::iterator_t<V>> |
difference_type
|
ranges::range_difference_t<V> |
[編集] データメンバー
| メンバ | 説明 |
ranges::split_view<V, Pattern>* parent_ (private) |
親の split_view オブジェクトへのポインタ (説明用のメンバオブジェクト*) |
ranges::iterator_t<V> cur_ (private) |
現在のサブレンジの開始位置を指す、基底の view へのイテレータ(説明用のメンバオブジェクト*) |
ranges::subrange<ranges::iterator_t<V>> next_ (private) |
現在のサブレンジの次にあるパターンの位置へのサブレンジ (説明用のメンバオブジェクト*) |
bool trailing_empty_ (private) |
空の末尾サブレンジ(もしあれば)に到達したかどうかを示すフラグ (説明用のメンバオブジェクト*) |
[編集] メンバー関数
| (コンストラクタ) (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) |
std::ranges::split_view::iterator::iterator
| /*iterator*/() = default; |
(1) | (C++20以降) |
| constexpr /*iterator*/( split_view& parent, ranges::iterator_t<V> current, ranges::subrange<ranges::iterator_t<V>> next ); |
(2) | (C++20以降) |
1) 非静的データメンバーをデフォルトメンバー初期化子で初期化します。つまり、
- ranges::split_view* parent_ = nullptr;,
- ranges::iterator_t<V> cur_ = ranges::iterator_t<V>();,
- ranges::subrange<ranges::iterator_t<V>> next_ = ranges::subrange<ranges::iterator_t<V>>();、および
- bool trailing_empty_ = false;.
2) 非静的データメンバーを初期化します。
- ranges::split_view* parent_ = std::addressof(parent);,
- ranges::iterator_t<V> cur_ = std::move(current);,
- ranges::subrange<ranges::iterator_t<V>> next_ = std::move(next);、および
- bool trailing_empty_ = false;.
std::ranges::split_view::iterator::base
| constexpr const ranges::iterator_t<V> base() const; |
(C++20以降) | |
return cur_; と同等です。
std::ranges::split_view::iterator::operator*
| constexpr value_type operator*() const; |
(C++20以降) | |
return {cur_, next_.begin()}; と同等です。
std::ranges::split_view::iterator::operator++
| constexpr /*iterator*/& operator++(); |
(1) | (C++20以降) |
| constexpr void operator++( int ); |
(2) | (C++20以降) |
1) 同値:
cur_ = next_.begin();
cur_ = next_.begin();
if (cur_ != ranges::end(parent_->base_))
{
if (cur_ = next_.end(); cur_ == ranges::end(parent_->base_))
{
trailing_empty_ = true;
next_ = {cur_, cur_};
}
else
next_ = parent_->find_next(cur_);
}
else
trailing_empty_ = false;
2) auto tmp = *this; ++*this; return tmp; と同等です。
[編集] 非メンバー関数
| operator== (C++20) |
基底イテレータを比較する (関数) |
operator==(std::ranges::split_view::iterator, std::ranges::split_view::iterator)
| friend constexpr bool operator==( const /*iterator*/& x, const /*iterator*/& y ); |
(C++20以降) | |
return x.cur_ == y.cur_ and x.trailing_empty_ == y.trailing_empty_; と同等です。
!= 演算子は operator== から合成される。
この関数は通常の 非修飾 または 修飾 ルックアップでは見えず、std::ranges::split_view::iterator が引数の関連クラスである場合にのみ 引数依存名前探索 (ADL) で見つけることができます。