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

C++ STL deque rend() 함수 완벽 가이드

이 글에서는 C++ STL에서 Deque의 rend() 함수가 어떤 기능을 하는지 예제와 함께 자세히 살펴보겠습니다.

Deque(덱)란 무엇인가?

Deque(Double Ended Queue, 덱)는 양쪽 끝에서 모두 요소를 추가하거나 제거할 수 있는 시퀀스 컨테이너입니다. 일반적인 큐(Queue) 자료구조는 데이터를 뒤쪽(END)에만 삽입하고 앞쪽(FRONT)에서만 삭제할 수 있습니다. 버스 정류장 줄에 비유하면, 사람은 맨 뒤에서만 줄에 설 수 있고 맨 앞에 선 사람이 가장 먼저 나가게 됩니다.

반면 덱은 이름 그대로 '양방향 큐'이기 때문에 앞쪽과 뒤쪽 어느 쪽에서든 데이터의 삽입과 삭제가 가능하다는 점이 가장 큰 특징입니다.

rend() 함수란?

rend() 함수는 deque 컨테이너의 첫 번째 요소 바로 앞 위치를 가리키는 역방향 반복자(reverse iterator)를 반환합니다. 즉, 역방향 순회의 '끝'을 표시하는 역할을 하며, rbegin()부터 rend()까지 순회하면 요소들이 역순으로 방문됩니다.

문법: deque_name.rend()

반환값: deque의 첫 번째 요소 이전 위치를 가리키는 역방향 반복자(const_reverse_iterator)

예제

입력 Deque: 5 4 4 2 0
출력 역순 Deque: 0 2 4 4 5

입력 Deque: R E C T I F I E R
출력 역순 Deque: R E I F I T C E R

구현 접근 방법

  • 먼저 deque를 선언하고 초기화합니다.
  • begin()부터 end()까지 순회하며 원본 deque를 출력합니다.
  • rbegin()부터 rend()까지 순회하여 역순 deque를 출력합니다.
  • 두 결과를 비교해 역순 순회가 올바르게 동작했는지 확인합니다.

위 접근 방식을 따르면 deque의 역순 출력을 손쉽게 구현할 수 있습니다.

예제 1: 정수형 deque

// deque rend() 함수의 동작을 보여주는 C++ 코드
#include <iostream>
#include <deque>
using namespace std;

int main() {
    // deque 초기화
    deque<int> deq = { 7, 4, 0, 3, 7 };

    // 원본 deque 출력
    cout << "Deque: ";
    for (auto x = deq.begin(); x != deq.end(); ++x)
        cout << *x << " ";

    // 역방향 deque 출력
    cout << "\n역방향 Deque: ";
    for (auto x = deq.rbegin(); x != deq.rend(); ++x)
        cout << *x << " ";

    return 0;
}

실행 결과

Deque: 7 4 0 3 7
역방향 Deque: 7 3 0 4 7

위 코드를 실행하면 원본 deque는 입력 순서대로 출력되고, rbegin()rend()를 사용한 순회 결과는 정확히 반대 순서로 출력되는 것을 확인할 수 있습니다.

예제 2: 문자형 deque

// 문자 deque에서 rend() 함수 활용 예제
#include <iostream>
#include <deque>
using namespace std;

int main() {
    // deque 초기화
    deque<char> deq = { 'S', 'U', 'B', 'T', 'R', 'A', 'C', 'T' };

    cout << "Deque: ";
    for (auto x = deq.begin(); x != deq.end(); ++x)
        cout << *x << " ";

    // 역방향 deque 출력
    cout << "\n역방향 Deque: ";
    for (auto x = deq.rbegin(); x != deq.rend(); ++x)
        cout << *x << " ";

    return 0;
}

실행 결과

Deque: S U B T R A C T
역방향 Deque: T C A R T B U S

핵심 정리

rend()는 역방향 반복자의 끝 지점을 나타내며, 실제로 deque 자체를 뒤집는 것이 아니라 역순으로 순회할 때의 종료 조건 역할을 합니다. rbegin()rend()를 한 쌍으로 사용하면 별도의 복사나 정렬 없이도 컨테이너의 모든 요소를 역순으로 처리할 수 있어, 최신 요소부터 우선적으로 다뤄야 하는 상황에서 특히 유용합니다.