큐(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()로 값을 먼저 읽어 두는 패턴이 일반적으로 사용됩니다.