c++

[C++ STL 시리즈] 4편: stack과 queue 사용법

개발에대해 2025. 9. 20. 14:13

 

C++ STL 시리즈 4편: stack과 queue 사용법

지난 글에서는 STL의 deque 컨테이너 사용법을 살펴보았습니다.

이번 글에서는 STL에서 제공하는 **stack과 queue** 컨테이너를 정리하겠습니다.

두 컨테이너 모두 FIFO(First In First Out) 또는 LIFO(Last In First Out) 구조를 구현할 수 있는 자료구조로,

자료를 순차적으로 처리할 때 유용합니다.

 

1. stack이란?

stack은 **LIFO(Last In First Out)** 구조입니다.

즉, 가장 나중에 추가한 요소가 가장 먼저 삭제됩니다.

스택은 프로그램의 함수 호출, 되돌리기(undo) 기능 등에서 사용됩니다.

 

stack 선언과 초기화

#include <stack>
#include <iostream>
using namespace std;

int main() {
    stack s; // stack 선언

    s.push(10);   // 요소 추가
    s.push(20);
    s.push(30);

    cout << "Top: " << s.top() << endl; // Top: 30

    s.pop(); // Top 요소 삭제

    cout << "Top after pop: " << s.top() << endl; // Top: 20
}
  

stack 주요 함수

  • push(value) : 요소 추가
  • pop() : 마지막 요소 제거
  • top() : 마지막 요소 확인
  • empty() : 비어 있는지 확인
  • size() : 요소 개수 확인
  •  

2. queue란?

queue는 **FIFO(First In First Out)** 구조입니다.

즉, 가장 먼저 추가한 요소가 가장 먼저 삭제됩니다. 큐는 작업 대기열, 이벤트 처리 등 순차적인 데이터 처리에 유용합니다.

 

queue 선언과 초기화

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

int main() {
    queue q;

    q.push(10);  // 뒤에 추가
    q.push(20);
    q.push(30);

    cout << "Front: " << q.front() << ", Back: " << q.back() << endl; // Front: 10, Back: 30

    q.pop(); // Front 제거

    cout << "Front after pop: " << q.front() << endl; // Front: 20
}
  

queue 주요 함수

  • push(value) : 요소 추가
  • pop() : 앞 요소 제거
  • front() : 앞 요소 확인
  • back() : 뒤 요소 확인
  • empty() : 비어 있는지 확인
  • size() : 요소 개수 확인

 

3. stack과 queue vs deque

사실 stack과 queue는 내부적으로 deque를 기본 컨테이너로 사용합니다.

deque의 앞/뒤 삽입/삭제가 빠른 특성을 이용하여 스택과 큐 기능을 효율적으로 구현할 수 있습니다.

따라서 deque와 기능이 겹치지만, stack과 queue는 **LIFO/FIFO 용도로 제한된 인터페이스**를 제공하여 실수를 방지하고 코드 가독성을 높입니다.

컨테이너 구조 접근 사용 예
stack LIFO Top 함수 호출 스택, undo
queue FIFO Front / Back 작업 대기열, 이벤트 처리
deque 양쪽 삽입/삭제 임의 접근 가능 큐/스택 구현, 앞뒤 삽입/삭제

 

반응형