std::experimental::ranges:: for_each
|
헤더 파일에 정의됨
<experimental/ranges/algorithm>
|
||
|
template
<
InputIterator I, Sentinel
<
I
>
S,
class
Proj
=
ranges::
identity
,
IndirectUnaryInvocable
<
projected
<
I, Proj
>>
Fun
>
|
(1) | (ranges TS) |
|
template
<
InputRange R,
class
Proj
=
ranges::
identity
,
IndirectUnaryInvocable
<
projected
<
ranges::
iterator_t
<
R
>
, Proj
>>
Fun
>
|
(2) | (ranges TS) |
[
first
,
last
)
내의 모든 반복자를 역참조한 결과에 프로젝션
proj
를 적용한 후, 그 결과에 주어진 함수 객체
f
를 순서대로 호출합니다
(즉,
ranges::
invoke
(
f,
ranges::
invoke
(
proj,
*
i
)
)
).
두 오버로드 모두에서, 반복자 타입이 mutable인 경우, f 는 역참조된 반복자를 통해 범위의 요소들을 수정할 수 있습니다. 만약 f 가 결과를 반환하는 경우, 해당 결과는 무시됩니다.
다른 알고리즘들과 달리, for_each는 요소들이 사소하게 복사 가능하더라도 시퀀스 내 요소들의 복사본을 만들 수 없습니다.
std::for_each
(이
MoveConstructible
만 요구하는 것)와 달리, 이 함수들은
Fun
이
CopyConstructible
을 모델링해야 합니다.
위에 기술된 선언들과는 별개로, 알고리즘 선언의 실제 템플릿 매개변수 개수와 순서는 명시되지 않습니다. 따라서 알고리즘을 호출할 때 명시적 템플릿 인자를 사용하는 경우, 해당 프로그램은 이식성이 없을 가능성이 높습니다.
목차 |
매개변수
| first, last | - | 함수를 적용할 범위 |
| r | - | 함수를 적용할 범위 |
| f | - | 범위 내 각 투영된 요소에 적용할 호출 가능 객체 |
| proj | - | 요소에 적용할 투영 |
반환값
다음 두 멤버를 포함하는
tagged_pair
객체:
-
첫 번째 멤버는 태그
tag::in를 가지며, 소스 범위의 past-the-end iterator입니다 (즉, 센티넬 last 와 비교 시 동일한 것으로 판별되는I타입의 iterator). -
두 번째 멤버는 태그
tag::fun를 가지며,std::move(f)로부터 초기화됩니다 (함수 객체의 모든 적용이 완료된 후).
복잡도
정확히 last - first 번의 f 와 proj 적용.
가능한 구현
template<InputIterator I, Sentinel<I> S, class Proj = ranges::identity, IndirectUnaryInvocable<ranges::projected<I, Proj>> Fun> auto for_each(I first, S last, Fun f, Proj proj = Proj{}) -> ranges::tagged_pair<tag::in(I), tag::fun(Fun)> { for (; first != last; ++first) ranges::invoke(f, ranges::invoke(proj, *first)); return {std::move(first), std::move(f)}; } |
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |
참고 항목
|
요소 범위에 함수를 적용합니다
(함수 템플릿) |
|
range-
for
loop
(C++11)
|
범위에 대한 루프를 실행합니다 |
|
함수 객체
를
범위
의 요소에 적용합니다
(함수 템플릿) |
|
|
(C++17)
|
함수 객체를 시퀀스의 처음 N개 요소에 적용합니다
(함수 템플릿) |