cpp(stl)

cpp11 역방향반복자

yam3u 2025. 5. 25. 02:17

 

역방향 반복자...

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