우선 스택(Stack)과 큐(Queue)의 기본 원리는 생략한다.
STL에서는 스택과 큐를 템플릿 클래스로 제공하고 있다.
[Stack]
stack은 기본적으로 LIFO구조이며, STL에서는 default로 deque(덱) 컨테이너를 사용한다.
즉, 실제로 내부적으로는 deque 구조로 구현되어 있지만, stack과 같이 이용할 수 있도록 제공하는 것이다.
stack container을 이용하기 위해서는 <stack> 헤더를 include 시켜주어야 한다.
1. stack container 선언(생성자)은 다음과 같다.
stack< [data type] > 이름
만약 내부 컨테이너 구조를 바꾸고 싶다면 다음과 같이 선언하면 된다.
stack< [data type] , [container type] > 이름
1
2
3
4
5
6
7
|
#include<iostream>
#include<stack>
int main(void){
stack<int> st; //int형 stack 선언, default인 deque컨테이너 이용
stack<int, vector<int>> st2; //int형, vector컨테이너 이용
}
|
2. stack container 의 멤버 함수들은 다음과 같다.
1) bool empty() const;
- stack이 비어있는지 확인
2) size_type size() const;
- stack의 크기 반환
3) value_type& top();
- stack의 가장 위 (top)에 있는 원소 반환 (제거 x)
4) void push(const value_type& val);
- stack의 가장 위에 데이터 삽입
5) void pop();
- 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
|
#include<iostream>
#include<stack>
using namespace std;
int main(void) {
stack<int> s;
s.push('A');
s.push(1);
s.push(2);
cout << "top element : " << s.top() << '\n';
s.pop();
cout << "top element : " << s.top() << '\n';
s.pop();
cout << "stack size : " << s.size() << '\n';
cout << "Is it empty? : " << (s.empty() ? "YES" : "NO") << '\n';
return 0;
}
|
[Queue]
Queue는 기본적으로 FIFO 구조이며, STL에서는 default로 deque(덱) 컨테이너를 사용한다.
Stack과 달리 vector container를 내부 컨테이너로 사용할 수가 없다. (앞에서 제거하는 동작을 지원하지 않음)
마찬가지로 Queue container를 이용하기 위해서는 <queue> 헤더를 include 해주어야 한다.
1. Queue container 선언(생성자)은 위의 Stack과 동일하다.
2. Queue container의 멤버 함수들은 다음과 같다.
1) value_type& front();
- 첫번째 원소에 접근 (push된지 가장 오래된 원소)
2) value_type& back();
- 마지막 원소에 접근 (가장 최근에 push된 원소)
3) bool empty() const;
- 비어있으면 true, 아니면 false를 반환
4) size_type size() const;
- queue의 크기 반환
5) void push(const value_type& val);
- queue에 원소를 삽입
6) void pop();
- queue에서 가장 늦게 삽입된 원소 삭제 (맨 앞에 있는 원소 삭제)
실제 사용 예시는 아래와 같다.
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
|
#include<iostream>
#include<queue>
using namespace std;
int main(void) {
queue<int> s;
s.push(0);
s.push(1);
s.push(2);
cout << "front element : " << s.front() << '\n';
cout << "back element : " << s.back() << '\n';
s.pop();
cout << "front element : " << s.front() << '\n';
s.pop();
cout << "queue size : " << s.size() << '\n';
cout << "Is it empty? : " << (s.empty() ? "YES" : "NO") << '\n';
return 0;
}
|
'Programming Language > C++' 카테고리의 다른 글
[C++] string (문자열) 클래스 정리 및 사용법과 응용 (3) | 2020.07.20 |
---|---|
[C++] vector container 정리 및 기본 사용법과 응용 (0) | 2020.05.06 |
[C++] lower_bound & upper_bound (0) | 2020.05.06 |
[C++] STL - sort (0) | 2020.04.21 |
[C++] 입출력 ( cin / cout ) (0) | 2020.04.16 |