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 |