본문 바로가기

C++/STL

[C++/STL] queue (큐)

이번에는 STL의 큐를 알아보겠습니다. 큐에 대한 설명은 이쪽을 참고하시거나 검색을 해주세요.

[자료구조] 큐

 

[자료구조] 큐

큐 자료의 입력과 출력이 FIFO(First In First Out)의 형태를 띄는 자료구조이다. LIFO의 스택과는 달리, 먼저 들어간 자료가 먼저 출력된다. 입력은 뒤(rear)에서, 출력은 앞(front)에서 일어난다. 줄을 서

ggjjdiary.tistory.com

 

#include <queue>

queue는 queue 헤더파일에 들어있습니다.

#include <queue>

 

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

 

queue의 기본 컨테이너는 덱입니다.

 

선언 방법

queue<int> q1; // int 형의 빈 큐

queue<int> q2({ 1, 2, 3, 4, 5 }); // 큐에 초기값으로 1, 2, 3, 4, 5를 넣은 큐

deque<int> d = { 1, 2, 3 };
queue<int> q3(d); // 큐에 초기값으로 덱 d를 넣은 큐

vector<int> v = { 4, 5, 6 };
queue<int, vector<int>> q4(v); // 큐에 초기값으로 벡터 v를 넣은 큐​

queue에서 사용할 수 있는 멤버함수

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

 

이전에 본 stack과 전체적으로 비슷합니다. 이는 둘 다 시퀀스 컨테이너(기본 deque)의 기능을 일부 제한하거나 변형해서 만든 컨테이너 어댑터이기 때문입니다.

 

queue 예제

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int main() {
    queue<int> q1;
    queue<int> q2({ 1, 2, 3, 4, 5 });
    deque<int> d = { 1, 2, 3 };
    queue<int> q3(d);
    vector<int> v = { 4, 5, 6 };
    queue<int, vector<int>> q4(v);
    
    for (int i = 1; i < 5; i++) {
        q1.push(i * 2); // 2, 4, 6, 8
    }

    cout << "q1 size : " << q1.size() << endl;
    cout << "q2 size : " << q2.size() << endl;
    cout << "q3 size : " << q3.size() << endl;
    cout << "q4 size : " << q3.size() << endl;

    cout << endl;
    q1.swap(q2);

    cout << "swap후 q1 size : " << q1.size() << endl;
    cout << "swap후 q2 size : " << q2.size() << endl;

    cout << endl;

    q1.emplace(7);
    q1.emplace(9);

    cout << "q1 : ";
    while (!q1.empty()) {
        cout << q1.front() << " ";
        q1.pop();
    }
    cout << endl;

    cout << "q2 : ";
    while (!q2.empty()) {
        cout << q2.front() << " ";
        q2.pop();
    }
    cout << endl;
    
    cout << "q3 : ";
    while (!q3.empty()) {
        cout << q3.front() << " ";
        q3.pop();
    }
    cout << endl;
    
    cout << "q4 : ";
    while (!q4.empty()) {
        cout << q4.front() << " ";
        q4.pop();
    }
    cout << endl;

    return 0;
}

출력

q1 size : 4
q2 size : 5
q3 size : 3
q4 size : 3

swap후 q1 size : 5
swap후 q2 size : 4

q1 : 1 2 3 4 5 7 9
q2 : 2 4 6 8
q3 : 1 2 3
q4 : 4 5 6

 

Reference

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

 

 

 

 

 

'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] stack (스택)  (0) 2022.03.31