본문 바로가기
C++

[C++] - 덱(deque) 사용법 정리 (STL)

by 개발 고양이 2024. 1. 16.

덱(deque)이란?

덱(deque)이란, double-ended-queue의 줄임말로, 큐의 양쪽에서 원소를 삽입하거나 삭제할 수 있는 자료구조이다. 덱은 C++에서 많이 쓰이는 STL 자료구조 중 하나이다. 

 

덱의 구조


1. 헤더파일

#include <deque>
using namespace std;

 

deque를 사용하기 위해서는 <deque> 헤더파일을 include 시켜주어야 한다.

STL deque는 std namespace에 있기 때문에 cin이나 cout을 사용할 때와 같이 using namespace std;를 써주면 std::를 일일이 써주지 않아도 되어 편리하다. 


2. deque 선언하기

 

deque<데이터 타입> 이름;

#include <iostream>
#include <deque>
using namespace std;

int main(){

	deque<int> dq;	//D라는 이름을 가진 비어있는 정수형 덱을 선언한다.

}

3. deque의 주요 참조 메소드

 

dq.assign(n,k); 덱 dq의 원소 n개를 k로 초기화
dq.at(i); 덱 dq의 i번째 원소를 반환
dq.begin(); 덱 dq의 첫 번째 원소의 위치 반환
dq.end(); 덱 dq의 마지막 원소의 다음 위치 반환
dq.front(); 덱 dq의 첫 번째 원소를 반환
dq.back(); 덱 dq의 마지막 원소를 반환
dq.empty(); 덱 dq이 비어있으면 true, 아니라면 false 반환
dq.size(); 덱 dq의 원소 수 반환

 


4. deque 원소 삽입하기

 

dq.push_front(k); 덱 dq의 맨 앞에 원소 k를 삽입
dq.push_back(k); 덱 dq의 맨 뒤에 원소 k를 삽입
dq.insert(dq.begin() + i, k); 덱 dq의 인덱스 i 위치에 k를 삽입

 


5. deque 원소 삭제하기

 

dq.pop_front(); 덱 dq의 맨 앞 원소를 삭제
dq.pop_back(); 덱 dq의 맨 뒤 원소를 삭제
dq.erase(i); 덱 dq의 i번째 원소를 삭제
dq.clear(); 덱 dq의 모든 원소를 한번에 삭제

 


6. deque 예시 코드

 

#include <iostream>
#include <string>
#include <cmath>
#include <deque>
using namespace std;

int main()
{
    deque<int> dq;	//정수형 덱 dq 선언
    
    dq.push_back(10);   //덱의 맨 뒤에 10 삽입
    dq.push_back(20);   //덱의 맨 뒤에 20 삽입
    dq.push_front(5);   //덱의 맨 앞에 5 삽입
    dq.push_back(30);

    cout << dq.front() << endl; //덱의 맨 앞 원소 5 출력

    dq.pop_front(); //덱의 맨 앞 원소 5 삭제

    cout << dq.front() << endl; //덱의 맨 앞 원소 10 출력


    if (dq.empty() != 1)
        cout << "Not Empty!" << endl;
    else
        cout << "Empty!" << endl;


    //반복문을 활용하여 배열처럼 덱의 모든 원소에 순차적으로 접근이 가능하다.
    for (int i = 0; i < dq.size(); i++) {
        cout << "덱의 " << i << "번째 원소 : " << dq.at(i) << endl;
    }


    dq.clear(); //덱의 모든 원소 삭제


    if (dq.empty() != 1) 
        cout << "Not Empty!" << endl;
    else
        cout << "Empty!" << endl;
}