std::ranges:: views:: filter, std::ranges:: filter_view
|
定義ヘッダ
<ranges>
|
||
|
template
<
ranges::
input_range
V,
std::
indirect_unary_predicate
<
ranges::
iterator_t
<
V
>>
Pred
>
|
(1) | (C++20以降) |
|
namespace
views
{
inline
constexpr
/* 未規定 */
filter
=
/* 未規定 */
;
|
(2) | (C++20以降) |
|
呼び出しシグネチャ
|
||
|
template
<
ranges::
viewable_range
R,
class
Pred
>
requires
/* 下記参照 */
|
(C++20以降) | |
|
template
<
class
Pred
>
constexpr /* レンジアダプタクロージャ */ filter ( Pred && pred ) ; |
(C++20以降) | |
view
を表すレンジアダプタ。
filter_view
は、
bidirectional_range
、
forward_range
、
input_range
、および
common_range
の各コンセプトを、基盤となる
view
V
がそれぞれのコンセプトをモデルする場合にモデルします。
目次 |
データメンバ
| メンバー | 説明 |
V
base_
|
基となるビュー
( 説明専用メンバーオブジェクト* ) |
copyable-box
<Pred>
(until C++23)
movable-box
<Pred>
(since C++23)
pred_
|
base_
の要素をフィルタリングするために使用される述語をラップする
( 説明専用メンバーオブジェクト* ) |
non-propagating-cache
<
ranges::
iterator_t
<
V
>>
begin_
(
V
が
forward_range
を満たす場合のみ存在)
|
pred_
を満たす
base_
の最初の要素へのイテレータをキャッシュするオブジェクト
( 説明専用メンバーオブジェクト* ) |
メンバー関数
filter_view
を構築する
(public member function) |
|
基になるビュー
V
を返す
(public member function) |
|
filter_view
内に格納された述語への参照を返す
(public member function) |
|
filter_view
の先頭イテレータを返す
(public member function) |
|
filter_view
のセンチネルを返す
(public member function) |
|
std::ranges::view_interface から継承 |
|
派生ビューが空かどうかを返す(
sized_range
または
forward_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
|
(C++23)
|
範囲の先頭を指す定数イテレータを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
(C++23)
|
範囲の定数イテレータ用センチネルを返す
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューが空でないかどうかを返す(
ranges::empty
が適用可能な場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの最初の要素を返す(
forward_range
を満たす場合に提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
派生ビューの最後の要素を返す(
bidirectional_range
かつ
common_range
を満たす場合のみ提供)
(
std::ranges::view_interface<D>
のpublic member function)
|
|
std::ranges::filter_view:: filter_view
|
filter_view
(
)
requires
std::
default_initializable
<
V
>
&&
std:: default_initializable < Pred > = default ; |
(1) | (C++20以降) |
|
constexpr
explicit
filter_view
(
V base, Pred pred
)
;
|
(2) | (C++20以降) |
base_
を値初期化し、
pred_
をデフォルト初期化する(これにより含まれる
Pred
が値初期化される)。
base_
を
std
::
move
(
base
)
で初期化し、
pred_
を
std
::
move
(
pred
)
で初期化する。
パラメータ
| base | - | フィルタリングする範囲 |
| pred | - | 要素をフィルタリングする述語 |
std::ranges::filter_view:: base
|
constexpr
V base
(
)
const
&
requires
std::
copy_constructible
<
V
>
;
|
(1) | (C++20以降) |
|
constexpr
V base
(
)
&&
;
|
(2) | (C++20以降) |
base_
を返すことに等しい。
std::move(base_)
を返すことに等しい。
(注:指定されたテキストブロック内に翻訳対象となる実際のテキストコンテンツが含まれていないため、HTML構造のみを保持した状態で出力しています)
std::ranges::filter_view:: pred
|
constexpr
const
Pred
&
pred
(
)
const
;
|
(C++20以降) | |
格納されている
Pred
オブジェクトへの参照を返します。
pred_
が値を保持していない場合、動作は未定義です。
std::ranges::filter_view:: begin
|
constexpr
/*iterator*/
begin
(
)
;
|
( 説明専用* ) | |
range
コンセプトで要求される償却定数時間計算量を提供するため、この関数は結果を
filter_view
オブジェクト内にキャッシュし、後続の呼び出しで使用します。以下と等価です:
if constexpr (!ranges::forward_range<V>) return /*iterator*/{*this, ranges::find_if(base_, std::ref(*pred_))}; else { if (!begin_.has_value()) begin_ = ranges::find_if(base_, std::ref(*pred_)); // キャッシング return /*iterator*/{*this, begin_.value())}; }
pred_
が値を保持していない場合、動作は未定義です。
(注:指定されたテキストブロック内に翻訳対象となる可読テキストが存在しないため、HTML構造はそのまま保持されています)
std::ranges::filter_view:: end
|
constexpr
auto
end
(
)
;
|
(C++20以降) | |
終端イテレータを返します。以下と同等です:
if constexpr (ranges::common_range<V>) return /*iterator*/{*this, ranges::end(base_)}; else return /*sentinel*/{*this};
推論ガイド
|
template
<
class
R,
class
Pred
>
filter_view ( R && , Pred ) - > filter_view < views:: all_t < R > , Pred > ; |
(C++20以降) | |
ネストされたクラス
filter_view
のイテレータ型
( 説明専用メンバクラス* ) |
|
基となるビューが
common_range
でない場合の
filter_view
の番兵型
( 説明専用メンバクラス* ) |
例
#include <iostream> #include <ranges> int main() { auto even = [](int i) { return 0 == i % 2; }; auto square = [](int i) { return i * i; }; for (int i : std::views::iota(0, 6) | std::views::filter(even) | std::views::transform(square)) std::cout << i << ' '; std::cout << '\n'; }
出力:
0 4 16
不具合報告
以下の動作変更に関する欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
|
LWG 3714
( P2711R1 ) |
C++20 | 複数パラメータコンストラクタがexplicitではなかった | explicitに変更 |
| P2325R3 | C++20 |
Pred
が
default_initializable
でない場合、デフォルトコンストラクタは
Pred
を含まない
filter_view
を構築する
|
filter_view
も同様に
default_initializable
ではない
|
関連項目
別の
view
の先頭要素から、述語が
false
を返す最初の要素までを含む
view
(クラステンプレート) (レンジアダプタオブジェクト) |