역방향 반복자...
Reverse_Iterator
: ++해도.. 뒤로 가게 해주는(사기를 치는) 반복자
왜 쓰는데?
기존 for문법을 그대로 쓰면서 거꾸로 순회가 가능..
void operator++() { --p; };로 만들어서.. 보이기엔 ++i 이지만.. 실제로는 뒤로 간다!!
왜냐면 s.rbegin()은 s.end()랑 똑같기에... 뒤로 가야하는데 for문법에서 begin()부터 end()로 가는데.. --을 쓴다?
뭔가 이상하잖아..보기에..
그러니까 사기를 치는거임.
reverse_iterator로.. 보이기엔 ++이지만 사실은 --로 뒤로가는... 거꾸로 순회가 가능하게 하는 반복자..
char& operator*() const { return *(p-1); };
지금 역방향 반복자에서..왜 *(p-1)을 가리키냐면..
reverse_iterator는.. end()를 기준으로 시작함.. 그러니까 마지막 요소의 다음을 가리키는거임
그러닉까 *rebegin()을 하려면 실제 데이터는 그 요소의 전부터 데이터가 존재하니까 *(end() -1)이 되어야 하는 것..!!
int arr[] = {1, 2, 3, 4, 5}; 이 있다고 칠 때..
operator*() = *(p-1)로 구현을 해줘야 되는 것이다.. 그래야만
rbegin() 은 5를 가리키고,
rend()는 1의 다음을 가리킴.
결론!!
역방향 반복자는.. 항상 현재보다 한 칸 뒤를 base로 가진다...
operator*()는 반드시 *(p-1)로 구현을 해줘야 정확하게 요소를 가리킬 수 있다!!
'cpp(stl)' 카테고리의 다른 글
cpp10 STRING객체(복사/이동)/push_back/emplace_back (0) | 2025.05.24 |
---|---|
cpp9 STRING객체/list/vector/deque (1) | 2025.05.23 |
cpp8(callable) (0) | 2025.04.11 |
cpp7(함수포인터/collable/람다) 4w2 (0) | 2025.04.11 |
cpp6(RAII/throw/unique_ptr) 4w1 (0) | 2025.04.08 |