std::experimental::ranges::find_end
| Defined in header <experimental/ranges/algorithm> |
||
| template< ForwardIterator I1, Sentinel<I1> S1, ForwardIterator I2, Sentinel<I2> S2, class Proj = ranges::identity, |
(1) | (ranges TS) |
| template< ForwardRange R1, ForwardRange R2, class Proj = ranges::identity, IndirectRelation<ranges::iterator_t<R2>, |
(2) | (ranges TS) |
[first1, last1) の中で、シーケンス [first2, last2) の最後の出現箇所を検索します(proj による射影後)。上記に示された宣言にもかかわらず、アルゴリズム宣言のテンプレートパラメータの実際の数と順序は未指定です。したがって、アルゴリズムを呼び出す際に明示的なテンプレート引数を使用すると、プログラムはおそらくポータブルではありません。
目次 |
[編集] パラメータ
| first1, last1 | - | 調査する要素の範囲 |
| r1 | - | 調査する要素の範囲 |
| first2, last2 | - | 検索対象の要素の範囲 |
| r2 | - | 検索対象の要素の範囲 |
| pred | - | 要素を比較するための述語 |
| proj | - | 最初の範囲の要素に適用する射影 |
[編集] 戻り値
範囲 [first1, last1) におけるシーケンス [first2, last2) の最後の出現箇所の先頭を示すイテレータ(proj による射影後)。
もし [first2, last2) が空であるか、またはそのようなシーケンスが見つからなかった場合は、last1 と等価なイテレータが返されます。
[編集] 計算量
述語と射影の適用回数は、S = last2 - first2 および N = last1 - first1 とすると、最大で S * (N - S + 1) 回です。
[編集] 注意
射影は、範囲 [first1, last1) にのみ適用されます。
[編集] 実装例
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) |