<개인공부>/[C++]

[C++] queue container 정리 및 사용법

BlockDMask 2017. 8. 3. 10:08
반응형
  • 안녕하세요! BlockDMask 입니다.

  • 오늘은 Container Adapter (stack, queue, priority queue)중
    두번째인 queue container adapter에 대해 정리해보겠습니다.

0. queue container

  • FIFO (First in, First out) 방식으로 동작 됩니다.

  • queue container는 deque와 list container 에 붙어서 사용 가능합니다. (vector container 불가능.)

    vector container가 불가능한 이유 : queue 자료구조 특성상 뒤에서 삽입하고 앞에서 빼야하는데(FIFO) vector는 앞에서 빼는 동작을 지원해 주지 않기 때문입니다.

  • 내부적으로 deque, list container 로 구현이 되어있습니다. 하지만 queue 구조로 동작하도록 멤버 함수를 제공해주는 것 입니다.

  • default 는 deque container 기반으로 설정 되어있습니다.

1. queue container 사용법

  • <queue> 헤더파일 안에있습니다.

  • using namespace std; 이름 공간을 사용해주면 편리합니다.

2. queue container 생성자와 연산자

  • 템플릿 선언부를 보겠습니다.

    template < typename T, typename Container = deque<T> >
    class queue;

  • 기본 생성자 형식은 queue< [Data Type]> [변수이름]; 입니다.
    ex) queue<int> q;
    ex) queue<string> q;


  • 내부 컨테이너 구조를 바꾸는 생성자 형식은
    queue< [Data Type], [Container Type] > [변수이름];
    입니다.

    ex) queue<int, list<int> > q;
    ex) queue<string, list<string> > q;


3. queue container 멤버 함수
  • value_type& front();
    - access first element
    - 첫번째 원소에 접근합니다. (첫번째 원소 참조)
    - 첫번째 원소라는 것은 곧 나올 원소 (pop 하면 나올 원소)
    - 들어간지 가장 오래된 원소.
    - const value_type& front() const; 

  • value_type& back();
    - access last element
    - 마지막 원소에 접근합니다. (마지막 원소 참조)
    - 마지막 원소라는 것은 방금 들어간 원소 (push를 막 마친 원소)
    - 가장 최근에 들어간 원소
    - const value_type& back() cont;

  • bool empty() const;
    - check whether container is empty
    - 비어있으면 true.
    - size() 가 0 이면 true.

  • size_type size() cont:
    - return size
    - 원소의 갯수 = size 를 반환합니다.
  • void push(const value_type& val);
    - Insert a new element
    - 초기화된 원소를 queue 안에 집에 넣는다.
    - 맨뒤에 원소를 집어 넣는다.
  • void pop()
    - Remove the first element
    - Remove the oldest element
    - 들어간지 가장 오래된 원소를 삭제한다. = 맨 앞에 있는 원소를 삭제한다.
    - 반환형 void 이므로 앞의 원소를 참조하려면 front를 사용해야합니다.
  • C++ 11 ( emplace, swap ) 이 존재합니다.

4. queue container 예제 


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
#include<iostream>
#include<queue>
using namespace std;
 
int main(void){
    queue<int> q;
 
    cout << endl << "=== empty ===" << endl;
    cout << "size : " << q.size() << endl;
    cout << "empty : " << q.empty() << endl;
 
    q.push(10);
    q.push(20);
    q.push(30);
    q.push(40);
    q.push(50);
    q.push(60);
    
    cout << endl << "=== push ===" << endl;
    cout << "size : " << q.size() << endl;
    cout << "empty : " << q.empty() << endl;    
    cout << "front : " << q.front() << endl;
    cout << "back : " << q.back() << endl << endl;
    
    
    cout << endl << "=== front & pop ===" << endl;
    while(!q.empty()){
        cout << q.front() << endl;
        q.pop();
    }
    
    return 0;    
}
cs
  • 결과 

참고 : http://www.cplusplus.com/reference/queue/queue/

반응형