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를 쓰는 것이 좋아요.