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

C++ STL을 활용한 큐(Queue) 구현 방법과 예제 코드


큐(Queue)는 선입선출(FIFO, First In First Out) 방식으로 동작하는 대표적인 선형 자료구조입니다. 가장 먼저 삽입된 요소가 가장 먼저 처리되는 규칙에 따라 연산이 수행되며, 작업 대기열이나 메시지 버퍼 등 다양한 분야에서 널리 활용됩니다.

C++ STL 큐의 주요 멤버 함수

C++ 표준 템플릿 라이브러리(STL)에서는 <queue> 헤더를 통해 큐를 기본적으로 제공하므로, 별도의 자료구조 구현 없이도 손쉽게 사용할 수 있습니다. 이번 예제에서 사용하는 핵심 함수는 다음과 같습니다.

q.size()  : 큐에 저장된 요소의 개수(크기)를 반환합니다.
q.push()  : 큐의 뒤쪽(rear)에 새로운 요소를 삽입합니다.
q.pop()   : 큐의 앞쪽(front)에서 요소를 제거합니다.
q.front() : 큐의 맨 앞에 있는 요소를 반환합니다.
q.back()  : 큐의 맨 뒤에 있는 요소를 반환합니다.

예제 코드

아래 프로그램은 메뉴 방식으로 동작합니다. 사용자가 번호를 입력하면 그에 따라 큐의 크기 확인, 요소 삽입·삭제, 맨 앞/맨 뒤 요소 조회 등의 작업을 수행하고, 6을 입력하면 프로그램이 종료됩니다.

#include <iostream>
#include <queue>
#include <string>
#include <cstdlib>
using namespace std;

int main() {
    queue<int> q;
    int c, i;
    while (1) {
        cout << "1.큐의 크기 확인" << endl;
        cout << "2.큐에 요소 삽입" << endl;
        cout << "3.큐에서 요소 삭제" << endl;
        cout << "4.큐의 맨 앞 요소 출력" << endl;
        cout << "5.큐의 맨 뒤 요소 출력" << endl;
        cout << "6.종료" << endl;
        cout << "메뉴를 선택하세요: ";
        cin >> c;
        switch (c) {
            case 1:
                cout << "큐의 크기: ";
                cout << q.size() << endl;
            break;
            case 2:
                cout << "삽입할 값을 입력하세요: ";
                cin >> i;
                q.push(i);
            break;
            case 3:
                i = q.front();
                q.pop();
                cout << "요소 " << i << " 삭제됨" << endl;
            break;
            case 4:
                cout << "큐의 맨 앞 요소: ";
                cout << q.front() << endl;
            break;
            case 5:
                cout << "큐의 맨 뒤 요소: ";
                cout << q.back() << endl;
            break;
            case 6:
                exit(1);
            break;
            default:
                cout << "잘못된 선택입니다" << endl;
        }
    }
    return 0;
}

실행 결과

실제 실행 시에는 매 반복마다 메뉴가 다시 출력되지만, 아래에서는 전체적인 흐름을 파악하기 쉽도록 주요 입력 과정만 정리했습니다.

1.큐의 크기 확인
2.큐에 요소 삽입
3.큐에서 요소 삭제
4.큐의 맨 앞 요소 출력
5.큐의 맨 뒤 요소 출력
6.종료

메뉴를 선택하세요: 1
큐의 크기: 0

메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 1

메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 2

메뉴를 선택하세요: 3
요소 1 삭제됨

메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 4

메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 7

메뉴를 선택하세요: 2
삽입할 값을 입력하세요: 6

메뉴를 선택하세요: 4
큐의 맨 앞 요소: 2

메뉴를 선택하세요: 5
큐의 맨 뒤 요소: 6

메뉴를 선택하세요: 6
Exit code: 1

마무리

STL의 queue 컨테이너를 활용하면 복잡한 내부 구현 없이도 FIFO 구조의 자료 처리를 간단하게 구현할 수 있습니다. 참고로 pop()은 삭제된 값을 반환하지 않기 때문에, 위 예제처럼 삭제 전에 front()로 값을 먼저 읽어 두는 패턴이 일반적으로 사용됩니다.