Namespaces
Variants

std::experimental::ranges:: find, std::experimental::ranges:: find_if, std::experimental::ranges:: find_if_not

From ja.cppreference.net
HTMLタグ、属性、C++コード内のテキストは翻訳せず、元のフォーマットを保持しました。C++固有の用語も翻訳していません。 **翻訳結果:** HTMLタグ、属性、``、`
`、``タグ内のテキスト、およびC++固有の用語は翻訳せず、元のフォーマットを保持しています。
HTMLタグ、属性、C++コード内のテキストは翻訳せず、元のフォーマットを保持しました。C++固有の用語も翻訳していません。 (注:このHTML要素には翻訳対象のテキストコンテンツが含まれていないため、元の構造をそのまま保持しています)
template < InputIterator I, Sentinel < I > S, class T, class Proj = ranges:: identity >

requires IndirectRelation < ranges:: equal_to <> , projected < I, Proj > , const T * >

I find ( I first, S last, const T & value, Proj proj = Proj { } ) ;
(1) (ranges TS)
template < InputRange R, class T, class Proj = ranges:: identity >

requires IndirectRelation < ranges:: equal_to <> ,
projected < ranges:: iterator_t < R > , Proj > , const T * >

ranges:: safe_iterator_t < R > find ( R && r, const T & value, Proj proj = Proj { } ) ;
(2) (ranges TS)
template < InputIterator I, Sentinel < I > S, class Proj = ranges:: identity ,

IndirectUnaryPredicate < projected < I, Proj >> Pred >

I find_if ( I first, S last, Pred pred, Proj proj = Proj { } ) ;
(3) (ranges TS)
template < InputRange R, class Proj = ranges:: identity ,

IndirectUnaryPredicate < projected < ranges:: iterator_t < R > , Proj >> Pred >

ranges:: safe_iterator_t < R > find_if ( R && r, Pred pred, Proj proj = Proj { } ) ;
(4) (ranges TS)
template < InputIterator I, Sentinel < I > S, class Proj = ranges:: identity ,

IndirectUnaryPredicate < projected < I, Proj >> Pred >

I find_if_not ( I first, S last, Pred pred, Proj proj = Proj { } ) ;
(5) (ranges TS)
template < InputRange R, class Proj = ranges:: identity ,

IndirectUnaryPredicate < projected < ranges:: iterator_t < R > , Proj >> Pred >

ranges:: safe_iterator_t < R > find_if_not ( R && r, Pred pred, Proj proj = Proj { } ) ;
(6) (ranges TS)

範囲 [ first , last ) 内で特定の条件を満たす最初の要素を返します:

1) find は投影された値が value と等しい要素を検索します(つまり、 value == ranges:: invoke ( proj, * i ) の場合)。
3) find_if は、射影された値に対して述語 p が true を返す要素を検索します(つまり、 ranges:: invoke ( pred, ranges:: invoke ( proj, * i ) ) が true の場合)。
5) find_if_not は、射影された値に対して述語 q が false を返す要素を検索する(つまり、 ranges:: invoke ( pred, ranges:: invoke ( proj, * i ) ) が false となる要素)。
2,4,6) (1,3,5) と同じですが、 r をソース範囲として使用します。これは、 ranges:: begin ( r ) を first として、 ranges:: end ( r ) を last として使用する場合と同様です。

上記に示された宣言にかかわらず、アルゴリズム宣言の実際のテンプレートパラメータの数と順序は未規定です。したがって、アルゴリズムを呼び出す際に明示的なテンプレート引数を使用する場合、プログラムはおそらく移植性がありません。

目次

パラメータ

first, last - 検査する要素の範囲
r - 検査する要素の範囲
value - 投影された要素と比較する値
pred - 投影された要素に適用する述語
proj - 要素に適用する投影

戻り値

条件を満たす最初の要素へのイテレータ。そのような要素が見つからない場合は、 last と等価なイテレータを返します。

計算量

最大で last - first 回の述語と射影の適用。

実装例

第一バージョン
template<InputIterator I, Sentinel<I> S, class T, class Proj = ranges::identity>
    requires IndirectRelation<ranges::equal_to<>, projected<I, Proj>, const T*>
I find(I first, S last, const T& value, Proj proj = Proj{})
{
    for (; first != last; ++first)
        if (ranges::invoke(proj, *first) == value)
            break;
    return first;
}
第二バージョン
template<InputIterator I, Sentinel<I> S, class Proj = ranges::identity,
         IndirectUnaryPredicate<projected<I, Proj>> Pred>
I find_if(I first, S last, Pred pred, Proj proj = Proj{})
{
    for (; first != last; ++first)
        if (ranges::invoke(pred, ranges::invoke(proj, *first)))
            break;
    return first;
}
第三バージョン
template<InputIterator I, Sentinel<I> S, class Proj = ranges::identity,
         IndirectUnaryPredicate<projected<I, Proj>> Pred>
I find_if_not(I first, S last, Pred pred, Proj proj = Proj{})
{
    for (; first != last; ++first)
        if (!ranges::invoke(pred, ranges::invoke(proj, *first)))
            break;
    return first;
}

例

関連項目

特定の条件を満たす最初の要素を検索する
(関数テンプレート & アルゴリズム関数オブジェクト)
等しい(または指定された述語を満たす)最初の隣接する2つの要素を検索する
(関数テンプレート)
特定の範囲内で最後に現れる要素の並びを検索する
(関数テンプレート)
要素の集合のうちいずれか一つを検索する
(関数テンプレート)
2つの範囲が異なる最初の位置を検索する
(関数テンプレート)
要素の範囲を検索する
(関数テンプレート)