std::prev

std::prev (이전 반복자)

반복자 it의 n번째 선행자(이전 원소)를 돌려주는 함수예요. C++11부터 있어요(C++17부터 constexpr).

출처: cppreference

본문

<iterator> 헤더에 정의돼 있어요.

// C++17 이전
template< class BidirIt >
BidirIt prev( BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1 );

// C++17부터 (constexpr)
template< class BidirIt >
constexpr BidirIt prev( BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1 );

반복자 it의 n번째 선행자(n이 음수면 -n번째 후속자)를 돌려줘요.

매개변수

  • it — 반복자
  • n — 내려갈 요소 수

타입 요구사항: BidirIt은 LegacyBidirectionalIterator 요구사항을 만족해야 해요.

반환값

it의 n번째 선행자(n이 음수면 -n번째 후속자)를 보관하는 BidirIt 타입의 반복자예요.

복잡도

선형이에요. 다만 BidirIt이 추가로 LegacyRandomAccessIterator 요구사항을 만족하면 상수예요.

가능한 구현

template<class BidirIt>
constexpr // since C++17
BidirIt prev(BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1)
{
    std::advance(it, -n);
    return it;
}

참고

--c.end() 표현식은 컴파일되는 경우가 많지만 보장되지는 않아요. c.end()는 rvalue 표현식이라 그렇지 않을 수 있고, std::prev를 쓰는 것이 좋아요.

더 알아보기 (Learn more)

cppreference