Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ STL에서 deque rbegin() 함수 활용법 완벽 정리


이 글에서는 C++ STL에서 Deque의 rbegin() 함수가 어떻게 작동하는지 예제와 함께 자세히 살펴보겠습니다.

Deque란 무엇인가?

Deque(Double Ended Queue, 덱)는 양쪽 끝에서 삽입과 삭제가 모두 가능한 시퀀스 컨테이너입니다. 일반적인 큐(Queue) 자료구조는 데이터를 뒤(Rear)에만 삽입하고 앞(Front)에서만 삭제할 수 있습니다. 버스 정류장의 줄을 예로 들면, 새로 온 사람은 줄의 맨 뒤에만 설 수 있고 맨 앞에 선 사람이 가장 먼저 나가는 구조입니다. 반면 덱은 이름 그대로 양쪽 끝 어디에서든 데이터의 삽입과 삭제가 자유롭습니다.

rbegin() 함수란?

rbegin() 함수는 덱의 마지막 요소를 가리키는 역방향 반복자(reverse iterator)를 반환합니다. 역방향 반복자를 사용하면 덱의 요소를 뒤에서부터 앞으로 순회할 수 있어, 마치 덱을 뒤집은 것과 같은 효과를 얻을 수 있습니다. 단, rbegin() 함수 자체가 원본 덱의 실제 순서를 변경하는 것은 아니라는 점에 유의하세요. 순회 방향만 반대로 바꿔주는 역할을 합니다.

문법 − deque_name.rbegin()

반환값 − 덱의 마지막 요소를 가리키는 역방향 반복자를 반환합니다.

예시

입력 Deque − 10 9 8 7 6 5 4 3 2 1

출력 역순 Deque − 1 2 3 4 5 6 7 8 9 10

입력 Deque − G O L D E N

출력 역순 Deque − N E D L O G

적용할 수 있는 접근 방법

  • 먼저 덱을 선언하고 초기화합니다.

  • 덱의 내용을 순서대로 출력합니다.

  • rbegin() 함수를 사용해 역방향 반복자를 얻습니다.

  • rend()에 도달할 때까지 순회하며 역순 덱을 출력합니다.

위 접근 방법을 따르면 덱을 역순으로 순회한 결과를 손쉽게 얻을 수 있습니다.

예제 1: 정수형 덱

// deque rbegin() 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <deque>
using namespace std;
int main(){
   // 덱 초기화
   deque<int> deq = { 5, 4, 0, 8, 5 };
   // 덱 출력
   cout << "Deque: ";
   for(auto x = deq.begin(); x != deq.end(); ++x)
      cout << *x << " ";
   // 역순 덱 출력
   cout << "\n역순 Deque: ";
   for(auto x = deq.rbegin(); x != deq.rend(); ++x)
      cout << *x << " ";
   return 0;
}

출력

위 코드를 실행하면 다음과 같은 결과가 생성됩니다.

입력 − Deque: 5 4 0 8 5
출력 − 역순 Deque: 5 8 0 4 5

예제 2: 문자형 덱

// deque rbegin() 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <deque>
using namespace std;
int main(){
   // 덱 초기화
   deque<char> deq = { 'P', 'R', 'O', 'D', 'U', 'C', 'T' };
   cout << "Deque: ";
   for(auto x = deq.begin(); x != deq.end(); ++x)
      cout << *x << " ";
   // 역순 덱 출력
   cout << "\n역순 Deque: ";
   for(auto x = deq.rbegin(); x != deq.rend(); ++x)
      cout << *x << " ";
   return 0;
}

출력

위 코드를 실행하면 다음과 같은 결과가 생성됩니다.

입력 − Deque: P R O D U C T
출력 − 역순 Deque: T C U D O R P

마무리

rbegin() 함수는 덱을 실제로 재배열하지 않고도 역순 순회가 필요할 때 매우 유용합니다. 특히 최근에 삽입된 요소부터 처리해야 하는 상황이나, 스택처럼 뒤에서부터 데이터를 확인해야 하는 로직을 구현할 때 rbegin()과 rend()를 조합하면 별도의 복사나 sort 없이 간결하게 해결할 수 있습니다.