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

C++ STL 스택(Stack) 완벽 정리: LIFO 구조와 핵심 멤버 함수


C++ STL에서 스택(stack)은 LIFO(Last In First Out, 후입선출) 구조로 구현된 컨테이너입니다. LIFO란 '마지막에 들어간 것이 가장 먼저 나온다'는 의미로, 책을 차곡차곡 쌓아 올린 더미를 떠올리면 이해하기 쉽습니다. 맨 위에 올린 책이 가장 먼저 꺼내지는 것처럼, 스택에서도 마지막에 삽입한 요소가 가장 먼저 제거됩니다.

C++ STL 스택(Stack) 완벽 정리: LIFO 구조와 핵심 멤버 함수

스택의 주요 멤버 함수

  • top() – 스택의 최상단(맨 위) 요소에 대한 참조를 반환합니다.

    문법 – name_of_stack.top()

    매개변수 – 없음

    반환값 – 스택 컨테이너의 최상단 요소에 대한 참조

  • push() – 스택 컨테이너에 요소를 삽입합니다.

    문법 – name_of_stack.push(element)

    매개변수 – 삽입할 요소를 인자로 받습니다.

    반환값 – 반환값이 없습니다(void).

  • pop() – 스택 컨테이너에서 요소를 제거합니다.

    문법 – name_of_stack.pop()

    매개변수 – 없음

    반환값 – 스택의 최상단 요소를 제거합니다. 참고로 표준 C++에서 pop()은 제거만 수행하며 값을 반환하지 않으므로, 값을 확인하려면 top()을 함께 사용하는 것이 안전합니다.

  • size() – 스택에 현재 저장된 요소의 총 개수를 계산합니다.

    문법 – name_of_stack.size()

    매개변수 – 없음

    반환값 – 스택에 들어 있는 요소의 개수

  • empty() – 스택이 비어 있는지 여부를 확인합니다.

    문법 – name_of_stack.empty()

    매개변수 – 없음

    반환값 – 불리언(Boolean) 값으로, 스택이 비어 있으면 true, 비어 있지 않으면 false를 반환합니다.

사용 예제

#include <bits/stdc++.h>
using namespace std;
int main(){
    // 스택 컨테이너 생성
    stack <int> newStack;
    // 스택에 요소 삽입
    newStack.push(10);
    newStack.push(20);
    newStack.push(30);
    newStack.push(40);
    // empty()를 사용해 요소가 삽입되었는지 확인
    if(!newStack.empty()){
        // 스택 크기 계산
        cout<<"Stack size is: "<< newStack.size();
    }
    else{
        cout<<"Stack is empty";
    }
    cout<<"\nElements in the stack are:";
    while(!newStack.empty()){
        cout<<" "<< newStack.top();
        newStack.pop();
    }
    return 0;
}

실행 결과

Stack size is: 4
Elements in the stack are: 40 30 20 10

위 예제에서 push()로 10, 20, 30, 40을 순서대로 삽입했지만, 출력 결과는 40부터 역순으로 나타납니다. 이는 LIFO 구조의 특성 때문으로, 마지막에 삽입한 40이 최상단에 위치하기 때문입니다. while 루프에서 top()으로 최상단 값을 출력하고 pop()으로 제거하는 과정을 반복하면 스택의 모든 요소를 역순으로 확인할 수 있습니다.