std::experimental::ranges:: adjacent_find
|
ヘッダーで定義
<experimental/ranges/algorithm>
|
||
|
template
<
ForwardIterator I, Sentinel
<
I
>
S,
class
Proj
=
ranges::
identity
,
IndirectRelation
<
projected
<
I, Proj
>>
Pred
=
ranges::
equal_to
<>
>
|
(1) | (ranges TS) |
|
template
<
ForwardRange R,
class
Proj
=
ranges::
identity
,
IndirectRelation
<
projected
<
ranges::
iterator_t
<
R
>
, Proj
>>
Pred
=
ranges::
equal_to
<>
>
|
(2) | (ranges TS) |
[
first
,
last
)
内で連続する同一要素を検索します。要素は
proj
で射影された後、
pred
を使用して比較されます。
上記に示された宣言にかかわらず、アルゴリズム宣言の実際のテンプレートパラメータの数と順序は未規定です。したがって、アルゴリズムを呼び出す際に明示的なテンプレート引数を使用する場合、プログラムはおそらく移植性がありません。
目次 |
パラメータ
| first, last | - | 検査対象の要素範囲 |
| r | - | 検査対象の要素範囲 |
| pred | - | 投影された要素を比較するために使用する述語 |
| proj | - | 要素に適用する投影 |
戻り値
同一の要素からなる最初のペアの最初の要素を指すイテレータ、すなわち範囲
[
first
,
last
)
内にあり、かつ
ranges::
invoke
(
pred,
ranges::
invoke
(
proj,
*
i
)
,
ranges::
invoke
(
proj,
*
(
i
+
1
)
)
)
!
=
false
が真となる最初のイテレータ
i
を指す。
そのような要素が見つからない場合、 last と等価と比較されるイテレータが返されます。
計算量
範囲が空でない場合、述語は正確に
min((result - first) + 1, (last - first) - 1)
回適用され、ここで
result
は戻り値であり、射影の適用は最大でその2倍となる。
実装例
template<ForwardIterator I, Sentinel<I> S, class Proj = ranges::identity, IndirectRelation<projected<I, Proj>> Pred = ranges::equal_to<>> I adjacent_find(I first, S last, Pred pred = Pred{}, Proj proj = Proj{}) { if (first == last) return first; I next = first; ++next; while (next != last) { if (ranges::invoke(pred, ranges::invoke(proj, *first), ranges::invoke(proj, *next))) return first; ++next; ++first; } return next; } |
例
|
このセクションは不完全です
理由: 例がありません |
関連項目
|
等しい(または与えられた述語を満たす)最初の2つの隣接する要素を検索する
(関数テンプレート) |
|
|
範囲内の連続する重複要素を削除する
(関数テンプレート) |