본문 바로가기

Programming Language/C++

[C++] STL - 스택(Stack) & 큐(Queue)

반응형

우선 스택(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<intvector<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;
}
 

 

 

반응형