std::ranges::filter_view<V,Pred>::iterator
class /*iterator*/; |
(C++20以降) (説明用*) |
|
filter_view::begin の戻り値の型です。
V が bidirectional_range をモデルとする場合は bidirectional_iterator、V が forward_range をモデルとする場合は forward_iterator、それ以外の場合は input_iterator です。
このイテレータが指す要素の変更は許可されますが、結果の値がフィルターの述語を満たさない場合は未定義の動作となります。
[編集] メンバ型
| 型 | 定義 |
iterator_concept
|
|
iterator_category( V がforward_range)
|
|
value_type
|
ranges::range_value_t<V> |
difference_type
|
ranges::range_difference_t<V> |
[編集] データメンバ
| メンバ | 説明 |
ranges::iterator_t<V> current_ (private) |
基底の view へのイテレータ(説明用のメンバオブジェクト*) |
ranges::filter_view<V, Pred>* parent_ (private) |
親となる filter_view オブジェクトへのポインタ(説明用のメンバオブジェクト*) |
[編集] メンバ関数
| イテレータを構築する (public member function) | |
| 基盤となるイテレータを返します。 (public member function) | |
| 基底のイテレータにフォワードします。 (public member function) | |
| イテレータを進める (public member function) | |
| イテレータをデクリメントします。 (public member function) |
std::ranges::filter_view::iterator::iterator
| /*iterator*/() std::default_initializable<ranges::iterator_t<V>> が必要です = default; |
(1) | (C++20以降) |
| constexpr /*iterator*/( filter_view& parent, ranges::iterator_t<V> current ); |
(2) | (C++20以降) |
std::ranges::filter_view::iterator::base
| constexpr const ranges::iterator_t<V>& base() const & noexcept; |
(1) | (C++20以降) |
| constexpr ranges::iterator_t<V> base() &&; |
(2) | (C++20以降) |
std::ranges::filter_view::iterator::operator*,->
| constexpr ranges::range_reference_t<V> operator*() const; |
(1) | (C++20以降) |
| constexpr ranges::iterator_t<V> operator->() const requires /*has-arrow*/<ranges::iterator_t<V>> && |
(2) | (C++20以降) |
型 I において、/*has-arrow*/<I> は、I がそれぞれ input_iterator をモデルとするかまたは満たす場合、かつ I がポインタ型であるか、または requires(I i){ i.operator->();} が true である場合にモデル化されるか満たされます。
std::ranges::filter_view::iterator::operator++
| constexpr /*iterator*/& operator++(); |
(1) | (C++20以降) |
| constexpr void operator++( int ); |
(2) | (C++20以降) |
| constexpr /*iterator*/ operator++( int ) requires ranges::forward_range<V>; |
(3) | (C++20以降) |
current_ = ranges::find_if(std::move(++current_), ranges::end(parent_->base_),
std::ref(*parent_->pred_));
return *this;.
std::ranges::filter_view::iterator::operator--
| constexpr /*iterator*/& operator--() requires ranges::bidirectional_range<V>; |
(1) | (C++20以降) |
| constexpr /*iterator*/ operator--( int ) requires ranges::bidirectional_range<V>; |
(2) | (C++20以降) |
[編集] 非メンバ関数
| (C++20) |
基底イテレータを比較する (関数) |
| (C++20) |
基底イテレータの間接参照の結果を関連する右辺値参照型にキャストする (関数) |
| (C++20) |
2つの基底イテレータが指すオブジェクトをスワップする (関数) |
operator==(std::ranges::filter_view::iterator)
| friend constexpr bool operator==( const /*iterator*/& x, const /*iterator*/& y ) requires std::equality_comparable<ranges::iterator_t<V>>; |
(C++20以降) | |
return x.current_ == y.current_; と同等です。
!= 演算子は operator== から合成される。
この関数は、通常の 非修飾または修飾 lookup では可視でなく、std::ranges::filter_view::iterator が引数に関連付けられたクラスである場合にのみ、引数依存lookup によって見つけることができます。
iter_move(std::ranges::filter_view::iterator)
| friend constexpr ranges::range_rvalue_reference_t<V> iter_move( const /*iterator*/& i ) |
(C++20以降) | |
return ranges::iter_move(i.current_); と同等です。
この関数は、通常の 非修飾または修飾 lookup では可視でなく、std::ranges::filter_view::iterator が引数に関連付けられたクラスである場合にのみ、引数依存lookup によって見つけることができます。
iter_swap(std::ranges::filter_view::iterator)
| friend constexpr void iter_swap( const /*iterator*/& x, const /*iterator*/& y ) noexcept(noexcept(ranges::iter_swap(x.current_, y.current_))) |
(C++20以降) | |
ranges::iter_swap(x.current_, y.current_) と同等です。
この関数は、通常の 非修飾または修飾 lookup では可視でなく、std::ranges::filter_view::iterator が引数に関連付けられたクラスである場合にのみ、引数依存lookup によって見つけることができます。
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| P2259R1 | C++20 | メンバ型 iterator_category は常に定義されていました。 |
V が forward_range の場合にのみ定義されます。 |
| LWG 3533 | C++20 | base の const& オーバーロードは基底のイテレータをコピーしていました。 |
それへの参照を返していました。 |
| LWG 3593 | C++20 | base の const& オーバーロードは `noexcept` でない可能性がありました。 |
noexcept に変更されました |