[스택] 스택 STL

서론

이번에는 스택을 구현하기 귀찮을 때 쓰면 좋은 STL을 다룰 것입니다.
STL은 stack말고 queue나 deque같은 것도 구현되어 있지만, 그것들은 나중에 해당 자료구조를 할 때 같이 다룰 것입니다.
STL은 C++에서만 사용 가능합니다.

http://www.cplusplus.com/reference/stack/stack/ 이 문서도 참고하시면 좋습니다.

사용 방법

일단 stack STL을 쓰기 위해서는

1
#include <stack>

을 써야 합니다.

스택 생성은

1
std::stack<type> 이름;

이런 식으로 하지만 std::를 붙이기 싫다면

1
using namespace std;

를 추가하시면 됩니다.

int형 스택 s를 만드는 전체 코드입니다.

1
2
3
4
#include <stack>
using namespace std;

stack<int> s;

자주 사용하는 메소드

주로 사용하는 메소드는 5가지 정도입니다.

  • .empty() - 스택이 비어있으면 true, 비어있지 않으면 false을 반환합니다.
  • .size() - 스택에 있는 데이터의 개수를 반환합니다.
  • .top() - 스택의 맨 위에 있는 값(가장 나중에 넣은 값)을 반환합니다.
  • .push(data) - 스택에 data를 삽입합니다.
  • .pop() - 스택에서 데이터를 제거합니다.

https://www.acmicpc.net/problem/10828 이 문제를 풀어봅시다.

  1. 먼저 n을 입력받고, 명령어를 n번 입력 받습니다.
  2. 명령어에 따라 알맞은 행동을 수행합니다.
  3. 만약 명령어가 push이면 숫자 x를 더 입력 받아 stack.push(x)를 합니다.
  4. 만약 명령어가 pop이면 stack.top()을 출력한 뒤 stack.pop()을 해줍니다.
  5. 만약 명령어가 size이면 stack.size()를 출력합니다.
  6. 만약 명령어가 empty이면 stack.empty()를 출력합니다.
  7. 만약 명령어가 top이면 stack.top()를 출력합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <stack>
#include <string>
using namespace std;

int n;
stack<int> s;

int main(){
	cin >> n;
	while(n--){
		string op;
		cin >> op;
		if(op == "push"){
			int x; cin >> x;
			s.push(x);
		}
		else if(op == "pop"){
			if(s.empty()) cout << -1 << "\n";
			else{
				cout << s.top() << "\n";
				s.pop();
		    }
		}
		else if(op == "size"){
			cout << s.size() << "\n";
        }
		else if(op == "empty"){
			cout << s.empty() << "\n";
		}
		else if(op == "top"){
			if(s.empty()) cout << -1 << "\n";
			else cout << s.top() << "\n";
		}
	}
}