Namespaces
Variants

std:: prev

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
헤더 파일에 정의됨 <iterator>
template < class BidirIt >
BidirIt prev ( BidirIt it, typename std:: iterator_traits < BidirIt > :: difference_type n = 1 ) ;
(C++11부터)
(C++17까지)
template < class BidirIt >

constexpr

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

이터레이터 it n 번째 선행자(또는 - n 번째 후행자, 만약 n 이 음수인 경우)를 반환합니다.

목차

매개변수

it - 반복자
n - 요소 개수 it 가 내려가야 하는 횟수
타입 요구사항
-
BidirIt LegacyBidirectionalIterator 의 요구사항을 충족해야 함.

반환값

BidirIt 타입의 반복자로, 반복자 it n 번째 선행자(또는 - n 번째 후행자, 만약 n 이 음수인 경우)를 가리킵니다.

복잡도

선형.

그러나 BidirIt 가 추가적으로 LegacyRandomAccessIterator 요구사항을 충족하는 경우, 복잡도는 상수입니다.

가능한 구현

template<class BidirIt>
constexpr // 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 표현식이며, rvalue의 감소 연산이 동작함을 보장하도록 명시하는 반복자 요구 사항이 존재하지 않습니다. 특히 반복자가 포인터로 구현되거나 operator -- 가 lvalue-ref-qualified로 구현된 경우, -- c. end ( ) 는 컴파일되지 않는 반면, std :: prev ( c. end ( ) ) 는 컴파일됩니다.

예제

#include <iostream>
#include <iterator>
#include <vector>
int main()
{
    std::vector<int> v{3, 1, 4};
    auto it = v.end();
    auto pv = std::prev(it, 2);
    std::cout << *pv << '\n';
    it = v.begin();
    pv = std::prev(it, -2);
    std::cout << *pv << '\n';
}

출력:

1
4

참고 항목

(C++11)
반복자를 증가시킴
(함수 템플릿)
주어진 거리만큼 반복자를 전진시킴
(함수 템플릿)
두 반복자 사이의 거리를 반환함
(함수 템플릿)
주어진 거리만큼 또는 경계까지 반복자를 감소시킴
(알고리즘 함수 객체)