💡 퀵 접속: cpp.kr/stack

stack

C++ 표준 라이브러리의 컨테이너 어댑터로, LIFO(Last In First Out) 방식으로 동작하는 스택을 구현합니다.

기본 사용법

#include <iostream>
#include <stack>

int main() {
    // 스택 생성
    std::stack<int> s;
    
    // 요소 추가
    s.push(1);
    s.push(2);
    s.push(3);
    
    // 스택 크기
    std::cout << "스택 크기: " << s.size() << std::endl;
    
    // 요소 출력
    std::cout << "스택의 요소들: ";
    while (!s.empty()) {
        std::cout << s.top() << " ";
        s.pop();
    }
    std::cout << std::endl;
    
    return 0;
}

실행 결과:

스택 크기: 3
스택의 요소들: 3 2 1

스택 조작

#include <iostream>
#include <stack>
#include <string>

int main() {
    std::stack<std::string> history;
    
    // 방문 기록 추가
    history.push("메인 페이지");
    history.push("제품 목록");
    history.push("제품 상세");
    
    // 현재 페이지 확인
    std::cout << "현재 페이지: " << history.top() << std::endl;
    
    // 뒤로 가기
    history.pop();
    std::cout << "이전 페이지: " << history.top() << std::endl;
    
    // 남은 기록 출력
    std::cout << "\n방문 기록:" << std::endl;
    while (!history.empty()) {
        std::cout << history.top() << std::endl;
        history.pop();
    }
    
    return 0;
}

실행 결과:

현재 페이지: 제품 상세
이전 페이지: 제품 목록

방문 기록:
제품 목록
메인 페이지

스택 복사

#include <iostream>
#include <stack>

int main() {
    std::stack<int> s1;
    
    // 원본 스택에 요소 추가
    for (int i = 1; i <= 3; ++i) {
        s1.push(i);
    }
    
    // 스택 복사
    std::stack<int> s2 = s1;
    
    // 복사된 스택 출력
    std::cout << "복사된 스택의 요소들: ";
    while (!s2.empty()) {
        std::cout << s2.top() << " ";
        s2.pop();
    }
    std::cout << std::endl;
    
    return 0;
}

실행 결과:

복사된 스택의 요소들: 3 2 1

참고사항

  • stack은 std 네임스페이스에 정의되어 있습니다.
  • 기본적으로 deque 컨테이너를 기반으로 합니다.
  • top()으로 최상위 요소에 접근할 수 있습니다.
  • push()로 요소를 추가하고 pop()으로 요소를 제거합니다.
  • 스택은 중간 요소에 직접 접근할 수 없습니다.
메서드 설명
push() 요소 추가
pop() 최상위 요소 제거
top() 최상위 요소 접근
size() 요소 개수 반환
empty() 스택이 비어있는지 확인
swap() 다른 스택과 내용 교환