std::ranges:: next
|
헤더에 정의됨
<iterator>
|
||
|
호출 시그니처
|
||
|
template
<
std::
input_or_output_iterator
I
>
constexpr I next ( I i ) ; |
(1) | (C++20부터) |
|
template
<
std::
input_or_output_iterator
I
>
constexpr I next ( I i, std:: iter_difference_t < I > n ) ; |
(2) | (C++20부터) |
|
template
<
std::
input_or_output_iterator
I,
std::
sentinel_for
<
I
>
S
>
constexpr I next ( I i, S bound ) ; |
(3) | (C++20부터) |
|
template
<
std::
input_or_output_iterator
I,
std::
sentinel_for
<
I
>
S
>
constexpr I next ( I i, std:: iter_difference_t < I > n, S bound ) ; |
(4) | (C++20부터) |
반복자 i 의 n 번째 후속자를 반환합니다.
이 페이지에서 설명하는 함수형 개체들은 algorithm function objects (일반적으로 niebloids 로 알려진) 즉:
- 명시적 템플릿 인수 목록은 이들 중 어느 것을 호출할 때도 지정할 수 없습니다.
- 이들 중 어느 것도 인수 의존 이름 검색 에 보이지 않습니다.
- 이들 중 어느 것이 함수 호출 연산자 왼쪽의 이름으로 일반 비한정 이름 검색 에 의해 발견될 때, 인수 의존 이름 검색 이 억제됩니다.
목차 |
매개변수
| i | - | 반복자 |
| n | - | 진행할 요소의 개수 |
| bound | - | i 가 가리키는 범위의 끝을 나타내는 센티넬 |
반환값
복잡도
I
와
S
가 모두
std::
random_access_iterator
<
I
>
와
std::
sized_sentinel_for
<
S, I
>
를 만족하거나, 또는
I
와
S
가
std::
assignable_from
<
I
&
, S
>
를 만족하는 경우; 그렇지 않으면 선형.
I
와
S
가 모두
std::
random_access_iterator
<
I
>
와
std::
sized_sentinel_for
<
S, I
>
를 만족하면 상수 시간; 그렇지 않으면 선형 시간.
가능한 구현
struct next_fn { template<std::input_or_output_iterator I> constexpr I operator()(I i) const { ++i; return i; } template<std::input_or_output_iterator I> constexpr I operator()(I i, std::iter_difference_t<I> n) const { ranges::advance(i, n); return i; } template<std::input_or_output_iterator I, std::sentinel_for<I> S> constexpr I operator()(I i, S bound) const { ranges::advance(i, bound); return i; } template<std::input_or_output_iterator I, std::sentinel_for<I> S> constexpr I operator()(I i, std::iter_difference_t<I> n, S bound) const { ranges::advance(i, n, bound); return i; } }; inline constexpr auto next = next_fn(); |
참고 사항
표현식
++
x.
begin
(
)
가 종종 컴파일되기는 하지만, 이것이 보장되지는 않습니다:
x.
begin
(
)
는 rvalue 표현식이며, rvalue의 증가가 작동할 것이라고 보장하는 요구사항은 존재하지 않습니다. 특히 반복자가 포인터로 구현되었거나
operator++
가 lvalue-ref-qualified인 경우,
++
x.
begin
(
)
는 컴파일되지 않는 반면,
ranges
::
next
(
x.
begin
(
)
)
는 컴파일됩니다.
예제
#include <cassert> #include <iterator> int main() { auto v = {3, 1, 4}; { auto n = std::ranges::next(v.begin()); assert(*n == 1); } { auto n = std::ranges::next(v.begin(), 2); assert(*n == 4); } { auto n = std::ranges::next(v.begin(), v.end()); assert(n == v.end()); } { auto n = std::ranges::next(v.begin(), 42, v.end()); assert(n == v.end()); } }
참고 항목
|
(C++20)
|
주어진 거리만큼 또는 경계까지 반복자를 감소시킴
(알고리즘 함수 객체) |
|
(C++20)
|
주어진 거리만큼 또는 주어진 경계까지 반복자를 전진시킴
(알고리즘 함수 객체) |
|
(C++11)
|
반복자를 증가시킴
(함수 템플릿) |