더북(TheBook)

prev()는 첫 번째 인수로 받은 반복자를 두 번째 인수로 지정한 숫자만큼 감소시킨 반복자를 반환한다.*** 두 번째 인수의 기본값은 1이다. 첫 번째 인수는 반드시 양방향 반복자 기능이 있는 반복자만 지정할 수 있다.

int data[]{1, 2, 3, 4, 5, 6};
auto iter = std::end(data);
std::cout << "네 번째 원소: " << \*std::prev(iter, 3) << std::endl;

이들 함수로 만든 결과는 랜덤 액세스 반복자에 산술 연산을 사용해도 얻을 수 있지만, 더 낮은 기능 카테고리에 속한 반복자로는 산술 연산을 할 수 없다. 이들 함수를 사용하면 랜덤 액세스 반복자가 아닐 때 코드에서 쓰이는 연산을 간단하게 할 수 있다. 예를 들어 더 낮은 카테고리의 반복자로 advance()와 같은 효과를 내려면 루프를 작성해야 한다.

*** 역주

next()는 다음 원소, prev()는 이전 원소를 연상하게 하는 표현이니 next()는 n개 다음 원소, prev()는 n개 이전 원소라고 표현할 수도 있다. 그러나 std::rbegin(data)std::rend(data)로 역방향 반복자를 받았을 때 next()prev()의 이동 방향은 반대가 된다. 즉, next라고 하면 오른쪽으로 이동하고, prev라고 하면 왼쪽으로 이동하는 상식과 맞지 않다. 순방향 반복자냐 역방향 반복자에 따라 이동 방향이 달라지므로 next()는 반복자를 증가시키는 연산이고, prev()는 반복자를 감소시키는 연산이라고 표현한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.