Namespaces
Variants

std::ranges::filter_view<V,Pred>::iterator

ja.cppreference.net より
 
 
範囲ライブラリ
範囲アダプタ
 
 
class /*iterator*/;
(C++20以降)
(説明専用*)

から返される型 filter_view::begin。

これは bidirectional_iterator である(ただし Vが bidirectional_range を満たす場合)、forward_iterator である(Vが forward_range を満たす場合)、および input_iterator である(それ以外の場合)。

このイテレータが指す要素の変更は許可されますが、結果の値がフィルタの述語を満たさない場合、未定義動作となります。

メンバー型

型 定義
iterator_concept
iterator_category
( V が
forward_range をモデル化する場合にのみ存在)

C を型 std:: iterator_traits < ranges:: iterator_t < V >> :: iterator_category とする。

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*/ ( )
requires std:: default_initializable < ranges:: iterator_t < V >> = default ;
(1) (since C++20)
constexpr /*iterator*/ ( filter_view & parent,
ranges:: iterator_t < V > current ) ;
(2) (since C++20)
1) current_ と parent_ をそれぞれのデフォルトメンバ初期化子で初期化します。これらはそれぞれ = ranges:: iterator_t < V > ( ) および = nullptr です。
2) current_ を std :: move ( current ) で、parent_ を std:: addressof ( parent ) で初期化します。

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以降)
1) current_を返すことに等しい。
2) std::move(current_)を返すことに等しい。

(注:指定されたテキストブロック内に翻訳対象の自然言語テキストが含まれていないため、HTML構造はそのまま保持されています)

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 >> &&

std:: copyable < ranges:: iterator_t < V >> ;
(2) (C++20以降)
1) return *current_; と等価。
2) return current_; と等価。

型 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以降)
1) 次と等価:
current_ = ranges:: find_if ( std :: move ( ++ current_ ) , ranges:: end ( parent_ - > base_ ) ,
std:: ref ( * parent_ - > pred_ ) ) ;
return * this ;
.
2) 次と等価: ++* this ; .
3) 次と等価: auto tmp = * this ; ++* this ; return tmp ; .

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以降)
1) 次と等価:
do
-- current_ ;
while ( ! std:: invoke ( * parent_ - > pred_, * current_ ) ) ;
return * this ;
。
2) 次と等価: auto tmp = * this ; --* this ; return tmp ; 。

非メンバー関数

(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以降)

x.current_ == y.current_ と等価。

!= 演算子は operator==から合成 されます。

この関数は通常の 非修飾名探索 または 修飾名探索 では可視化されず、 実引数依存の名前探索 によってのみ、 std::ranges::filter_view:: iterator が引数の関連クラスである場合に見つけることができます。

iter_move (std::ranges::filter_view:: iterator )

friend constexpr ranges:: range_rvalue_reference_t < V >

iter_move ( const /*iterator*/ & i )

noexcept ( noexcept ( ranges:: iter_move ( i. current_ ) ) ) ;
(C++20以降)

return ranges:: iter_move ( i. current_ ) ; と等価。

この関数は通常の 非修飾名探索 または 修飾名探索 では可視化されず、 std::ranges::filter_view:: iterator が引数の関連クラスである場合にのみ 実引数依存探索 によって発見される。

(注:指定されたテキストブロック内に翻訳対象の自然言語テキストが存在しないため、HTML構造はそのまま保持されています)

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_ ) ) )

requires std:: indirectly_swappable < ranges:: iterator_t < V >> ;
(C++20以降)

ranges:: iter_swap ( x. current_ , y. current_ ) と等価。

この関数は通常の 非修飾名探索 または 修飾名探索 では可視化されず、 std::ranges::filter_view:: iterator が引数の関連クラスである場合にのみ 実引数依存探索 によって発見される。

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
P2259R1 C++20 メンバ型 iterator_category は常に定義されていた V が forward_range の場合のみ定義
LWG 3533 C++20 base の const & オーバーロードは基盤イテレータをコピーしていた その参照を返す
LWG 3593 C++20 base の const & オーバーロードはnoexceptではない可能性があった noexceptに変更