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 | - | 투영된 요소들을 비교하는 데 사용할 predicate |
| proj | - | 요소들에 적용할 projection |
반환값
동일한 요소들의 첫 번째 쌍 중 첫 번째 요소에 대한 반복자, 즉 범위
[
first
,
last
)
내에 있으며
i
와
i + 1
모두가 해당 범위에 있고
ranges::
invoke
(
pred,
ranges::
invoke
(
proj,
*
i
)
,
ranges::
invoke
(
proj,
*
(
i
+
1
)
)
)
!
=
false
조건을 만족하는 첫 번째 반복자
i
를 가리킵니다.
해당하는 요소가 없으면, last 와 비교 시 동일한 값을 가지는 반복자가 반환됩니다.
복잡도
범위가 비어 있지 않은 경우, 술어를 정확히
min((result - first) + 1, (last - first) - 1)
번 적용하며, 여기서
result
는 반환값입니다. 그리고 프로젝션은 최대 두 배까지 적용될 수 있습니다.
가능한 구현
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; } |
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |
참고 항목
|
동일한(또는 주어진 조건자를 만족하는) 첫 두 개의 인접한 항목을 찾습니다
(함수 템플릿) |
|
|
범위에서 연속된 중복 요소를 제거합니다
(함수 템플릿) |