std::ranges:: prev
|
헤더에 정의됨
<iterator>
|
||
|
호출 시그니처
|
||
|
template
<
std::
bidirectional_iterator
I
>
constexpr I prev ( I i ) ; |
(1) | (C++20부터) |
|
template
<
std::
bidirectional_iterator
I
>
constexpr I prev ( I i, std:: iter_difference_t < I > n ) ; |
(2) | (C++20부터) |
|
template
<
std::
bidirectional_iterator
I
>
constexpr I prev ( I i, std:: iter_difference_t < I > n, I bound ) ; |
(3) | (C++20부터) |
반복자 i 의 n 번째 선행자를 반환합니다.
이 페이지에서 설명하는 함수형 개체들은 algorithm function objects (일반적으로 niebloids 로 알려진) 즉:
- 명시적 템플릿 인수 목록은 이들 중 어느 것을 호출할 때도 지정할 수 없습니다.
- 이들 중 어느 것도 인수 의존적 탐색 에 보이지 않습니다.
- 이들 중 어느 것이 함수 호출 연산자의 왼쪽 이름으로 일반 비한정 탐색 에 의해 발견될 때, 인수 의존적 탐색 이 억제됩니다.
목차 |
매개변수
| i | - | 반복자 |
| n | - | 요소 개수 i 가 하강해야 하는 |
| bound | - | i 가 가리키는 범위의 시작을 나타내는 반복자 |
반환값
복잡도
가능한 구현
struct prev_fn { template<std::bidirectional_iterator I> constexpr I operator()(I i) const { --i; return i; } template<std::bidirectional_iterator I> constexpr I operator()(I i, std::iter_difference_t<I> n) const { ranges::advance(i, -n); return i; } template<std::bidirectional_iterator I> constexpr I operator()(I i, std::iter_difference_t<I> n, I bound) const { ranges::advance(i, -n, bound); return i; } }; inline constexpr auto prev = prev_fn(); |
참고 사항
표현식
--
r.
end
(
)
가 컨테이너에 대해 컴파일되는 경우가 많지만, 이것이 보장되지는 않습니다:
r.
end
(
)
는 rvalue 표현식이며, rvalue의 감소가 작동한다고 보장하는 반복자 요구 사항은 존재하지 않습니다. 특히 반복자가 포인터로 구현되거나
operator--
가 lvalue-ref-qualified인 경우,
--
r.
end
(
)
는 컴파일되지 않는 반면
ranges
::
prev
(
r.
end
(
)
)
는 컴파일됩니다.
이 문제는
ranges::
common_range
을 모델링하지 않는 범위에서 더욱 악화됩니다. 예를 들어, 일부 기본 범위의 경우
ranges
::
transform_view
::
end
의 반환 타입이
ranges
::
transform_view
::
begin
과 동일하지 않아
--
r.
end
(
)
가 컴파일되지 않을 수 있습니다. 이는
ranges::prev
가 해결할 수 없는 문제이지만, 해결 방법이 존재합니다.
예제
#include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v{3, 1, 4}; auto pv = std::ranges::prev(v.end(), 2); std::cout << *pv << '\n'; pv = std::ranges::prev(pv, 42, v.begin()); std::cout << *pv << '\n'; }
출력:
1 3
참고 항목
|
(C++20)
|
주어진 거리만큼 또는 경계까지 반복자를 증가시킴
(algorithm function object) |
|
(C++20)
|
주어진 거리만큼 또는 주어진 경계까지 반복자를 전진시킴
(algorithm function object) |
|
(C++11)
|
반복자를 감소시킴
(function template) |