std::advance
std::advance (반복자 전진)
주어진 반복자 it를 n개 요소만큼 증가시키는 함수예요. C++11부터 있어요.
출처: cppreference
본문
<iterator> 헤더에 정의돼 있어요.
// C++17 이전
template< class InputIt, class Distance >
void advance( InputIt& it, Distance n );
// C++17부터 (constexpr)
template< class InputIt, class Distance >
constexpr void advance( InputIt& it, Distance n );
주어진 반복자 it를 n개 요소만큼 증가시켜요. n이 음수면 반복자를 감소시켜요. 이 경우 InputIt은 LegacyBidirectionalIterator 요구사항을 만족해야 해요. 그렇지 않으면 동작은 정의되지 않아요.
매개변수
it— 전진시킬 반복자n— 전진시킬 요소 수
타입 요구사항: InputIt은 LegacyInputIterator 요구사항을 만족해야 해요.
반환값
(없음)
복잡도
선형이에요. 다만 InputIt이 추가로 LegacyRandomAccessIterator 요구사항을 만족하면 상수예요.
참고
지정된 증가·감소 시퀀스가 비증가 가능한 반복자(예: past-the-end 반복자)를 증가시키거나, 비감소 가능한 반복자(front 반복자·singular 반복자)를 감소시켜야 하면 동작은 정의되지 않아요.
가능한 구현
// libstdc++/libc++ 구현 참고
template<class InputIt, class Distance>
constexpr void advance(InputIt& it, Distance n)
{
using category = typename std::iterator_traits<InputIt>::iterator_category;
// 입력·순방향·양방향·임의접근 반복자별 오버로드
}