Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
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 をモデル化する場合にのみ存在)

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に変更