산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ std::stack 완전 정복: LIFO 컨테이너 어댑터 실전 가이드

std::stack이란?

std::stack은 LIFO(Last In, First Out) 원칙을 구현하는 컨테이너 어댑터입니다. 요소의 삽입과 제거가 한쪽 끝(top)에서만 허용됩니다. 기본적으로 std::deque를 내부 컨테이너로 사용하지만, 어떤 시퀀스 컨테이너(std::vector, std::list 등)도 공급 가능합니다.

컨테이너 어댑터는 이터레이터를 노출하지 않으므로 스택을 직접 순회할 수 없습니다. 대신 멤버 함수를 통해 상호작용합니다.

학습 목표

문법

<stack> 헤더 포함하고 다음 템플릿으로 스택 선언:

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

멤버 타입

핵심 연산

구현 개요

아래는 스택 연산의 시각적 표현입니다 (top of stack은 포인터로 표시).
C++ std::stack 완전 정복: LIFO 컨테이너 어댑터 실전 가이드

push()와 pop()

push() 메서드는 새 요소를 추가하여 크기를 1 증가시킵니다:

stack.push(value);

반면 pop()은 top 요소를 제거하고 크기를 줄입니다:

stack.pop();

예제 1: 기본 스택 조작

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    st.push(10);
    st.push(20);
    st.push(30);
    st.push(40);
    st.pop(); // 40 제거
    st.pop(); // 30 제거
    while (!st.empty()) {
        cout << ' ' << st.top();
        st.pop();
    }
    return 0;
}

출력: 20 10

empty(), size(), top()

이 유틸리티 함수들은 스택 상태에 대한 빠른 통찰을 제공합니다.

예제 2: 스택 상태 검사

#include <iostream>
#include <stack>
using namespace std;
void display(stack<int> s) {
    while (!s.empty()) {
        cout << '\t' << s.top();
        s.pop();
    }
    cout << '\n';
}
int main() {
    stack<int> st;
    st.push(32);
    st.push(21);
    st.push(39);
    st.push(89);
    st.push(25);
    cout << "The stack st is: ";
    display(st);
    cout << "\n st.size() : " << st.size();
    cout << "\n st.top() : " << st.top();
    st.pop();
    cout << "\n st after pop: ";
    display(st);
    return 0;
}

출력: 스택 내용, 크기, top 요소, pop 후 상태 표시

emplace()와 swap()

• emplace()는 요소를 제자리에서 구성하여 추가 복사 회피.
• swap()은 두 스택의 내용을 효율적으로 교환.

예제 3: emplace()와 swap() 사용

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st1, st2;
    st1.emplace(12);
    st1.emplace(19);
    st2.emplace(20);
    st2.emplace(23);
    st1.swap(st2);
    cout << "st1 = ";
    while (!st1.empty()) {
        cout << st1.top() << " ";
        st1.pop();
    }
    cout << endl << "st2 = ";
    while (!st2.empty()) {
        cout << st2.top() << " ";
        st2.pop();
    }
} 

출력: 스왑 전후 스택 내용 시연

STL에서 std::stack 사용

한 줄로 스택 구현:

std::stack<T> st;

예제:

#include <iostream>
#include <stack>
using namespace std;
int main() {
    stack<int> st;
    st.push(12);
    st.push(19);
    st.push(20);
    cout << st.top(); // 20
    cout << st.size(); // 3
    return 0;
}

요약

C 언어

  1. C++ 연산자 총정리: 종류, 예제, 샘플 프로그램
  2. C++ do-while 루프: 문법, 실전 예제, 중첩 루프
  3. C++ switch-case 마스터하기: 문법, 활용법, 실전 예제
  4. C++ 동적 배열 할당 완벽 가이드: new, delete, 실전 코드 예제
  5. C++ 포인터 완전 정복: 개념, 예제, 실전 활용
  6. C++ 연산자 오버로딩 실전 가이드: 문법, 접근법, 코드 예제
  7. C++ 구조체(struct) 완벽 가이드: 선언, 인스턴스, 포인터, 함수 인자 전달
  8. C++ std::map 완전 정복: 정렬된 키-값 컨테이너 실전 가이드
  9. C++ std::list 마스터하기: 문법, 함수, 실전 예제
  10. C++ 함수 완전 정복: 실전 코드 예제로 이해하기