std::stack

std::stack (스택 컨테이너 어댑터)

LIFO(후입선출, last-in first-out) 자료구조의 기능을 제공하는 컨테이너 어댑터예요. 스택의 원소를 기본 컨테이너의 뒤(스택의 top)에서 push·pop해요.

출처: cppreference

본문

<stack> 헤더에 정의돼 있고, 컨테이너 어댑터예요.

template<
    class T,
    class Container = std::deque<T>
> class stack;

std::stack 클래스는 스택(LIFO 자료구조)의 기능을 제공하는 컨테이너 어댑터예요. 기본 컨테이너의 래퍼 역할을 하며 특정 함수 집합만 제공해요. 스택은 기본 컨테이너의 뒤(스택의 top)에서 원소를 push·pop해요. C++26부터 모든 멤버 함수가 constexpr이에요.

템플릿 매개변수

  • T: 저장된 원소 타입. TContainer::value_type과 같지 않으면 프로그램은 ill-formed예요.
  • Container: 원소를 저장하는 기본 컨테이너 타입. SequenceContainer 요구사항을 만족하고 back(), push_back(), pop_back()을 일반적 의미로 제공해야 해요. 표준 컨테이너 std::vector(std::vector<bool> 포함), std::deque, std::list가 만족해요. 기본값은 std::deque예요.

멤버 타입

  • container_type = Container, value_type = Container::value_type, size_type = Container::size_type, reference, const_reference.
  • 보호 멤버 객체 c: 기본 컨테이너.

멤버 함수

  • 생성자, 소멸자, operator=.
  • 원소 접근: top.
  • 용량: empty, size.
  • 수정자: push, push_range(C++23), emplace(C++11), pop, swap(C++11).

비멤버 함수

  • operator==, !=, <, <=, >, >=, <=> (C++20): 두 stack 사전식 비교.
  • std::swap(std::stack) (C++11): std::swap 특수화.

헬퍼 클래스

  • std::uses_allocator<std::stack> (C++11): std::uses_allocator 형질 특수화.
  • std::formatter<std::stack> (C++23): std::stack 포맷 지원.

C++17부터 추론 가이드가 있어요. stack은 후입선출 순서가 필요한 알고리즘(예: 괄호 매칭, 되돌리기 연산, 깊이 우선 탐색)에 널리 쓰여요.

더 알아보기 (Learn more)

cppreference