[C++] std::stack

2025. 3. 14. 22:00·C | C++/STL
반응형

개요

 C++에서는 스택 자료구조를 갖는 컨테이너로 표준 라이브러리의 stack을 사용할 수 있습니다.

stack<int> st;

 stack은 요컨대 후입선출의 특징을 가지며, 주로 비슷하지만 선입선출(FIFO)의 특징을 갖는 std::queue와 비교됩니다. std::queue의 주요 특징은 아래 링크의 글에서 자세히 확인할 수 있습니다.

 

 

[C++] std::queue

개요 C++에서는 큐 자료구조를 갖는 컨테이너 어댑터로 표준 라이브러리의 queue를 사용할 수 있습니다.queue q; queue는 요컨대 선입선출의 특징을 가지며, 주로 비슷하지만 후입선출의 특징을 갖

hyeokjunjjang.tistory.com


특징

  • 컨테이너 어댑터 (Container Adapter)
    • 스택의 자료구조를 사용하면서 실제로 저장되는 컨테이너 형식을 선택할 수 있습니다.
    • 기본적으로 std::deque를 사용하고, 그 외에도 list, vector 등 다른 컨테이너를 사용할 수도 있습니다.
  • 후입선출 (LIFO; Last In First Out)
    • 가장 나중에 삽입된 데이터부터 제거됩니다.
  • 임의/순차적인 접근 제한
    • 단방향 구조로 구성되어 가장 위(top)에 있는 데이터에만 접근할 수 있습니다.
    • 따라서 stack은 iterator를 지원하지 않으며, 컨테이너 내의 모든 요소를 순회하기 어렵습니다.
  • 빠른 삽입 및 삭제
    • 데이터 삽입과 삭제는 가장 위(top)에서만 수행되기 때문에 작업이 비교적 빠른 시간에 수행됩니다.

헤더

#include <stack>

 stack을 사용하기 위해서 <stack> 헤더를 포함해야 합니다.


선언 및 초기화

 

템플릿 매개변수

stack<_Ty, _Container = deque<_Ty>>

 stack의 타입을 선언할 때, 최대 2개의 템플릿 매개변수를 받습니다.

  • _Ty은 실제 저장되는 데이터의 형식을 나타냅니다.
  • _Container는 스택 자료구조를 사용할 컨테이너를 나타냅니다. 지정하지 않으면 기본적으로 std::deque 컨테이너를 사용합니다.

 


생성자

stack<_Ty> st;

 stack을 선언하면 빈 상태의 스택 컨테이너를 선언할 수 있습니다. 추가로 stack은 중괄호를 이용해 컨테이너의 초기 요소 값을 설정할 수 없습니다.

 

stack 복사

stack<_Ty> st(_Right);

 다른 stack을 복사하여 새로운 stack을 생성합니다.

  • _Right는 복사할 stack을 나타냅니다.

 


주요 함수

 

size()

stack<int> st; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
size_t s = st.size(); // 6을 반환합니다.

 stack의 크기를 반환합니다.

 


empty()

stack<int> st; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
bool is_empty = st.empty(); // false를 반환합니다.

 stack이 비어있는지 여부(크기가 0이면 true, 그렇지 않으면 false)를 반환합니다.

 


top()

stack<int> st; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
int t = st.top(); // 6을 반환합니다.

 stack에서 가장 위의 요소를 반환합니다.

 


push(value)

stack<int> st; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
st.push(7); // 컨테이너는 { 1, 2, 3, 4, 5, 6, 7 } 상태입니다.

 stack의 가장 위에 요소를 추가합니다.

 


pop()

stack<int> st; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
st.pop(); // 컨테이너는 { 1, 2, 3, 4, 5 } 상태입니다.

 stack의 가장 위의 요소를 제거합니다.

 


swap(stack)

stack<int> st1; // 컨테이너는 {  1,  2,  3,  4,  5,  6 } 상태라고 가정합니다.
stack<int> st2; // 컨테이너는 { 11, 22, 33, 44, 55, 66 } 상태라고 가정합니다.
st1.swap(st2);
// st1 컨테이너는 { 11, 22, 33, 44, 55, 66 } 상태입니다.
// st2 컨테이너는 {  1,  2,  3,  4,  5,  6 } 상태입니다.

 stack의 모든 요소를 교환합니다.

 

반응형
'C | C++/STL' 카테고리의 다른 글
  • [C++] std::priority_queue
  • [C++] std::queue
  • [C++] std::vector
  • [C++] std::list
HYEOKJUN
HYEOKJUN
프로그래밍 관련 수업이나 웹 사이트에서 직접 얻은 정보를 공유하는 블로그입니다. (일부 잘못된 정보가 포함될 수 있습니다)
  • HYEOKJUN
    HYEOKJUN
    HYEOKJUN
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • UNITY (18)
        • Tool (9)
        • Script (9)
      • C | C++ (20)
        • Basic (11)
        • STL (8)
        • ETC (1)
      • C# (1)
        • Basic (0)
        • ETC (1)
      • Python (8)
        • Basic (7)
        • Library (1)
        • ETC (0)
      • WEB (2)
        • Basic (2)
      • Skill (0)
        • 자료구조 (0)
      • Workspace (0)
      • ETC (4)
  • 블로그 메뉴

    • 인기 글

    • 태그

      C++
      컨테이너
      반복문
      std
      Python
      red-black tree
      Localization
      vector
      자료형
      Unity
      stack
      변수
      C
      while
      Package
      조건문
      포인터
      C#
      queue
      식별자
    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    HYEOKJUN
    [C++] std::stack
    상단으로

    티스토리툴바