c++

[C++ STL 시리즈] 3편: deque 사용

개발에대해 2025. 9. 20. 11:12

 

C++ STL 시리즈 3편: deque 사용법

지난 글에서는 STL의 list 컨테이너를 살펴보았습니다.

이번 글에서는 STL의 deque(Double Ended Queue) 컨테이너를 다뤄보겠습니다.

deque는 vector와 list의 장점을 결합한 자료구조로, 양쪽 끝에서 삽입과 삭제가 모두 빠릅니다.

 

1. deque란?

deque는 양쪽 끝에서 요소를 삽입(push)하거나 삭제(pop)할 수 있는 컨테이너입니다.

vector처럼 임의 접근이 가능하며, list처럼 앞뒤 삽입과 삭제가 효율적입니다.

따라서 큐(Queue)나 스택(Stack)을 구현할 때 매우 유용합니다.

 

deque 선언과 초기화


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

int main() {
    deque dq;           // 빈 deque 선언
    deque dq2 = {1,2,3}; // 초기화
}
  

요소 삽입 및 삭제


// 뒤에 추가 / 삭제
dq.push_back(10);
dq.pop_back();

// 앞에 추가 / 삭제
dq.push_front(5);
dq.pop_front();
  

요소 접근


// 인덱스 접근
cout << dq[0] << endl;
cout << dq.at(0) << endl;
  

반복자를 이용한 순회


for(deque::iterator it = dq.begin(); it != dq.end(); ++it)
    cout << *it << " ";

// C++11 이후 range-based for
for(int n : dq)
    cout << n << " ";
  

 

2. vector, list와 deque 비교

컨테이너 임의 접근 앞 삽입/삭제 뒤 삽입/삭제 사용 용도
vector O(1) O(n) O(1) 임의 접근이 중요한 경우
list 불가 O(1) O(1) 삽입/삭제가 빈번한 경우
deque O(1) O(1) O(1) 큐/스택 구현, 앞뒤 삽입/삭제 필요 시

 

3. deque 활용 예제


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

int main() {
    deque dq;

    dq.push_back(10);    // 뒤에 추가
    dq.push_front(5);    // 앞에 추가
    dq.push_back(20);

    // 출력
    for(int n : dq)
        cout << n << " "; // 5 10 20

    dq.pop_front();      // 앞 삭제
    dq.pop_back();       // 뒤 삭제

    // 출력
    for(int n : dq)
        cout << n << " "; // 10
}
  
 

정리

이번 글에서는 STL의 deque 컨테이너 사용법을 살펴보았습니다.

deque는 vector와 list의 장점을 결합하여 임의 접근과 앞뒤 삽입/삭제가 모두 빠릅니다.

큐나 스택을 구현할 때 매우 유용하며, 앞뒤 요소를 자주 추가/삭제해야 하는 상황에서 vector보다 효율적입니다.

 

다음 글에서는 STL의 stack과 queue 컨테이너를 살펴보고, deque와의 차이점과 활용법을 다룰 예정입니다.

반응형