std::experimental::ranges:: find_end
|
ヘッダーで定義
<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
)
内で(
proj
による射影後)、シーケンス
[
first2
,
last2
)
の最後の出現を検索します。
上記に示された宣言にかかわらず、アルゴリズム宣言の実際のテンプレートパラメータの数と順序は未規定です。したがって、アルゴリズムを呼び出す際に明示的なテンプレート引数を使用する場合、プログラムはおそらく移植性がありません。
目次 |
パラメータ
| first1, last1 | - | 検査対象の要素範囲 |
| r1 | - | 検査対象の要素範囲 |
| first2, last2 | - | 検索対象の要素範囲 |
| r2 | - | 検索対象の要素範囲 |
| pred | - | 要素を比較する述語 |
| proj | - | 第一範囲の要素に適用する射影 |
戻り値
範囲
[
first1
,
last1
)
内におけるシーケンス
[
first2
,
last2
)
の最後の出現位置の先頭を指すイテレータ
(
proj
による射影適用後)。
[
first2
,
last2
)
が空の場合、またはそのようなシーケンスが見つからない場合、
last1
と等価なイテレータが返されます。
計算量
最大で
S * (N - S + 1)
回の述語と射影の適用が行われます。ここで
S
=
last2
-
first2
、
N
=
last1
-
first1
です。
注記
射影は範囲
[
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; } |
`, `
`, `
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
特定の範囲内で要素の最後のシーケンスを見つける
(関数テンプレート) |
|
|
要素の範囲を検索する
(関数テンプレート) |
|
|
一方の集合が他方の部分集合である場合に
true
を返す
(関数テンプレート) |
|
|
等しい(または与えられた述語を満たす)最初の隣接する2つの要素を見つける
(関数テンプレート) |
|
|
特定の基準を満たす最初の要素を見つける
(関数テンプレート) |
|
|
要素の集合のいずれかを検索する
(関数テンプレート) |
|
|
範囲内で要素の連続したコピーを検索する
(関数テンプレート) |