reverse_iterator(역방향 반복자) : 반복자(iterator)와는 정반대로 동작하는 반복자

++,-- 연산자를 이용하여 iter를 변경하고 그랬는데 반대로 동작하게된다.

 

std::vector에서 자주 사용해온 begin(), end() 명령어는 반환값으로 iter(반복자)를 반환하는데

rbegin(), rend()는 riter(역방향반복자)를 반환한다.

즉,begin() = rend() , end() = rbegin() 인것이다.

 

예제코드)

#include <iostream>
#include <vector>
#include <algorithm>

int main(void)
{
    std::vector<int> v = { 10,20,30,40,50 };
	
    //벡터의 첫 원소부터 차례대로 출력
    for (std::vector<int>::iterator iter = v.begin(); iter != v.end(); iter++)
    {
        int num = *iter;
        cout << num;
    }

    cout <<endl;
    
    //벡터의 뒷 원소부터 역으로 출력 ( riter가 ++ 로 증가하지만 역으로 감소한다)
    for (std::vector<int>::reverse_iterator riter = v.rbegin(); riter != v.rend(); riter++)
    {
        int num = *riter;
        cout << num;
    }

}

//출력 결과
1020304050
5040302010

이 역방향 반복자를 이용하여 vector 자료형의 내림차순 정렬을 쉽게 만들 수 있다.

내림차순 정렬을 하는 방법은 많지만 주로 코딩테스트를 풀 때 이 방법들을 사용해 왔다.

(sort(구간의 시작값, 구간의 끝값) , sort 함수는 algorithm 헤더에 포함되어있다,)

 

1.sort함수에서 조건자에 grearter<자료형>() 을 쓴다.
2.조건자를 재량것 compare 함수를 만들어 쓴다.

3.sort함수로 오름차순 정렬한것을 reverse()로 뒤집어 내림차순 정렬로 만들어 쓴다.

4.sort함수의 인자값을 역방향반복자를 매개변수로 넣는다. (이 코드 만들수 있다.)

 

예제 코드)

#include <iostream>
#include <vector>
#include <algorithm>

void main()
{
	std::vector<int> v = { 1,5,2,8,4,9 };

	//오름차순 정렬
	sort(v.begin(), v.end());
	
	for (int index : v)
	{
		std::cout << index << " ";
	}
	std::cout << std::endl;

	//내림차순 정렬 
	sort(v.rbegin(), v.rend()); // 이부분이 v의 원소들을 내림차순 정렬을 한다. 
	for (int index : v)
	{
		std::cout << index << " ";
	}
	return;
}

//출력 결과
//1 2 4 5 8 9 (오름차순 정렬)
//9 8 5 4 2 1 (내림차순 정렬)

 

'C++' 카테고리의 다른 글

unique() (vector의 중복 값 제거)  (0) 2023.06.12
STL 범용 수치 알고리즘 (accumulate , inner_product)  (0) 2023.06.09
문자집합(Character Set)  (0) 2023.06.04

+ Recent posts