名前空間
変種
操作

std::experimental::ranges::find_end

From cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
 
template< ForwardIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2,

          class Proj = ranges::identity,
          IndirectRelation<I2, projected<I1, Proj>> Pred = ranges::equal_to<> >
I1 find_end( I1 first1, S1 last1, I2 first2, S2 last2,

             Pred pred = Pred{}, Proj proj = Proj{} );
(1) (ranges TS)
template< ForwardRange R1, ForwardRange R2, class Proj = ranges::identity,

          IndirectRelation<ranges::iterator_t<R2>,
                           projected<ranges::iterator_t<R1>, Proj>> Pred = ranges::equal_to<> >
ranges::safe_iterator_t<R1> find_end( Rng1&& rng1, Rng2&& rng2,

                                      Pred pred = Pred{}, Proj proj = Proj{} );
(2) (ranges TS)
1) 範囲 [first1last1) の中で、シーケンス [first2last2) の最後の出現箇所を検索します(proj による射影後)。
2) (1) と同じですが、r1 を最初のソース範囲、r2 を2番目のソース範囲として使用します。あたかも ranges::begin(r1)first1ranges::end(r1)last1ranges::begin(r2)first2ranges::end(r2)last2 として使用しているかのように動作します。

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

目次

[編集] パラメータ

first1, last1 - 調査する要素の範囲
r1 - 調査する要素の範囲
first2, last2 - 検索対象の要素の範囲
r2 - 検索対象の要素の範囲
pred - 要素を比較するための述語
proj - 最初の範囲の要素に適用する射影

[編集] 戻り値

範囲 [first1last1) におけるシーケンス [first2last2) の最後の出現箇所の先頭を示すイテレータ(proj による射影後)。

もし [first2last2) が空であるか、またはそのようなシーケンスが見つからなかった場合は、last1 と等価なイテレータが返されます。

[編集] 計算量

述語と射影の適用回数は、S = last2 - first2 および N = last1 - first1 とすると、最大で S * (N - S + 1) 回です。

[編集] 注意

射影は、範囲 [first1last1) にのみ適用されます。

[編集] 実装例

template<ForwardIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2,
         class Proj = ranges::identity,
         IndirectRelation<I2, projected<I1, Proj>> Pred = ranges::equal_to<>>
I1 find_end(I1 first1, S1 last1, I2 first2, S2 last2,
            Pred pred = Pred{}, Proj proj = Proj{})
{
    I1 result = ranges::next(first1, last1);
    if (first2 == last2)
        return result;
    while (true)
    {
        I1 new_result = ranges::search(first1, last1, first2, last2, pred, proj);
        if (new_result == last1)
            break;
        else
        {
            result = new_result;
            first1 = result;
            ++first1;
        }
    }
    return result;
}

[編集]

[編集] 関連項目

特定の範囲内で最後の要素のシーケンスを見つける
(関数テンプレート) [編集]
要素の範囲を検索します。
(function template) [編集]
一方のセットがもう一方のサブセットであるかどうかを true で返します。
(function template) [編集]
等しい(または指定された述語を満たす)最初の2つの隣接する項目を見つける
(function template) [編集]
特定の基準を満たす最初の要素を見つける
(function template) [編集]
要素の集合のうちいずれか1つを検索する
(function template) [編集]
範囲内の要素の連続したコピーを検索します。
(function template) [編集]
English 日本語 中文(简体) 中文(繁體)