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*/
(
)
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) |
current_
と
parent_
をそれぞれのデフォルトメンバ初期化子で初期化します。これらはそれぞれ
=
ranges::
iterator_t
<
V
>
(
)
および
=
nullptr
です。
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以降) |
current_
を返すことに等しい。
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
>>
&&
|
(2) | (C++20以降) |
return *current_;
と等価。
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以降) |
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以降) |
do
-- current_ ;
while ( ! std:: invoke ( * parent_ - > pred_, * current_ ) ) ;
return * this ; 。
非メンバー関数
|
(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
)
|
(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_
)
)
)
|
(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に変更 |