본문 바로가기

C++/STL

[C++/STL] stack (스택)

C++ STL 컨테이너에는 자료구조 스택에 대한 연산들을 제공해주고 있습니다. 이에 대해 알아보겠습니다. 혹시 자료구조에 대한 스택을 알고 싶으시다면 아래를 참조하시거나 검색해주세요.

[자료구조] 스택

 

[자료구조] 스택

 시작하기에 앞서, 여기서 자료구조를 구현할 때 주로 C++을 사용했다. 어려운 문법들이나 라이브러리들을 사용하지 않았기에 C언어로 공부하는 사람들도 참고하기 좋을 것이다. 어디까지나 참

ggjjdiary.tistory.com

 

#include <stack>

stack은 stack 헤더파일에 들어있습니다.

#include <stack>

 

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

 

컨테이너가 기본 덱으로 설정되어있습니다.

 

선언 방법

stack<int> st1; // int 형의 빈 스택

stack<int> st2({ 1, 2, 3, 4, 5 }); // 스택에 초기값으로 1, 2, 3, 4, 5를 넣은 스택

deque<int> d = { 1, 2, 3 };
stack<int> st3(d); // 스택에 초기값으로 덱 d를 넣은 스택

vector<int> v = { 4, 5, 6 };
stack<int, vector<int>> st4(v); // 스택에 초기값으로 벡터 v를 넣은 스택

​stack에서 사용할 수 있는 멤버 함수

empty() - 스택이 비어있는지 확인합니다. 비었다면 true, 아니라면 false를 반환합니다.
size() - 스택의 크기를 반환합니다. 스택 안에 있는 요소의 수와 같습니다.
top() - 스택에서 가장 위에 있는 값(= 가장 마지막에 넣은 값)을 참조합니다. 
push() - 스택에 요소를 삽입합니다.
emplace(args) - push와 비슷하나, 차이점은 생성자에 매개 변수를 넣어서 객체를 생성해 스택에 저장합니다.
push는 값을 복사해서 저장한다면, emplace는 객체를 생성해서 스택에 저장합니다.
pop() - 스택에서 가장 위에 있는 값을 삭제합니다. 일반적인 pop과는 달리 값을 반환해주지는 않습니다.
swap() - 스택을 서로 바꿉니다. 서로 동일한 유형의 스택이여야 가능합니다.

 

stack 예제

#include <iostream>
#include <stack>
#include <vector>

using namespace std;

int main() {
    stack<int> st1;
    stack<int> st2({ 1, 2, 3, 4, 5 });
    deque<int> d = { 1, 2, 3 };
    stack<int> st3(d);
    vector<int> v = { 4, 5, 6 };
    stack<int, vector<int>> st4(v);
    
    for (int i = 1; i < 5; i++) {
        st1.push(i * 2); // 2, 4, 6, 8
    }

    cout << "st1 size : " << st1.size() << endl;
    cout << "st2 size : " << st2.size() << endl;
    cout << "st3 size : " << st3.size() << endl;
    cout << "st4 size : " << st3.size() << endl;

    cout << endl;
    st1.swap(st2);

    cout << "st1 size : " << st1.size() << endl;
    cout << "st2 size : " << st2.size() << endl;

    cout << endl;

    st1.emplace(7);
    st1.emplace(9);

    cout << "st1 : ";
    while (!st1.empty()) {
        cout << st1.top() << " ";
        st1.pop();
    }
    cout << endl;

    cout << "st2 : ";
    while (!st2.empty()) {
        cout << st2.top() << " ";
        st2.pop();
    }
    cout << endl;
    
    cout << "st3 : ";
    while (!st3.empty()) {
        cout << st3.top() << " ";
        st3.pop();
    }
    cout << endl;
    
    cout << "st4 : ";
    while (!st4.empty()) {
        cout << st4.top() << " ";
        st4.pop();
    }
    cout << endl;

    return 0;
}

출력

st1 size : 4
st2 size : 5
st3 size : 3
st4 size : 3

st1 size : 5
st2 size : 4

st1 : 9 7 5 4 3 2 1
st2 : 8 6 4 2
st3 : 3 2 1
st4 : 6 5 4

 

Reference

https://www.cplusplus.com/reference/stack/stack/stack/

 

 

 

 

 

'C++ > STL' 카테고리의 다른 글

[C++/STL] map, unordered_map  (0) 2022.04.21
[C++/STL] deque (덱)  (0) 2022.04.12
[C++/STL] vector (벡터)  (0) 2022.04.11
[C++/STL] priority_queue (우선순위 큐)  (1) 2022.04.05
[C++/STL] queue (큐)  (0) 2022.04.01