컨테이너의 rbegin() 멤버 함수는 컨테이너 순차열의 끝 표시 반복자이다. rend() 멤버 함수는 순차열의 첫 원소를 가리키는 반복자를 반환한다. 아래는 vector 컨테이너의 정방향 반복자와 역방향 반복자를 비교한 예제이다.
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50);
vector<int>::iterator begIter = v.begin();
vector<int>::iterator endIter = v.end();
cout << "iter : ";
for (vector<int>::iterator iter = v.begin(); iter != v.end(); ++iter)
{
cout << *iter << ", ";
}
cout << endl;
cout << "riter : ";
for (vector<int>::reverse_iterator riter = v.rbegin(); riter != v.rend(); ++riter)
{
cout << *riter << ", ";;
}
cout << endl;
return 0;
}
iter는 ++하면 반복자가 순차열의 정방향으로 이동하지만 riter를 ++하면 반복자가 순차열 역방향으로 이동한다.
X::reverse_iterator와 X::reverse_const_iterator 형식은 반복자 어댑터 reverse_iterator< T >를 사용해 X::iterator와 X::const_iterator를 반대로 동작하도록 변환한 형식입니다.
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
v.push_back(50);
reverse_iterator<vector<int>::iterator> rBegIter(v.end());
reverse_iterator<vector<int>::iterator> rEndIter(v.begin());
cout << "v [rBegIter, rEndIter): ";
while (rEndIter != rBegIter)
{
cout << *rBegIter << ' ';
++rBegIter;
}
cout << endl;
vector<int>::const_reverse_iterator rConstBegIter = v.rbegin();
vector<int>::const_reverse_iterator rConstEndIter = v.rend();
cout << "v with const reverse iterator: ";
while (rConstEndIter != rConstBegIter)
{
cout << *rConstBegIter << ' ';
++rConstBegIter;
}
cout << endl;
return 0;
}
굳이 왜 이렇게해서 쓰는지는... 잘모르겠다...