std::advance

std::advance (반복자 전진)

주어진 반복자 itn개 요소만큼 증가시키는 함수예요. 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 );

주어진 반복자 itn개 요소만큼 증가시켜요. 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;
    // 입력·순방향·양방향·임의접근 반복자별 오버로드
}

더 알아보기 (Learn more)

cppreference