본문 바로가기
프로그래밍 언어/C++

[C++] [STL] Deque

by 까망 하르방 2021. 7. 30.
반응형

Deque

- 헤더파일: #include <deque>

- Vector와 마찬가지로 배열 기반 컨테이너이다.

 

[C++] [STL] Vector 사용 방법

동적으로 원소를 추가하고 크기를 자동으로 늘려주는 Vector C++ 표준 라이브러리(STL) 중 하나이다. → #include - front() : 첫 번째 원소 - back() : 마지막 원소 - begin() : 첫번째 위치 - end() : 마지막..

zoosso.tistory.com

- vector와 큰 차이는 push_front()pop_front()이다. 

  - Queue 자료구조에서 FIFO (First In First Out)

  - Stack 자료구조에서 LIFO (Last In First Out) 였다면

 

[C++] [STL] Queue

Queue 기본 연산 - FIFO 구조 (First In First Out) - push(element) : 큐 (뒤에) 원소 추가 - pop() : 큐에 (앞쪽에) 있는 원소 삭제 - front() : 큐 제일 앞에 있는 원소 반환 - back() : 큐 제일 뒤에 있는..

zoosso.tistory.com

 

[C++] [STL] Stack

Stack 기본 연산 - LIFO 구조 (Last In First Out) - push(element) : 스택 (뒤쪽에) 원소 추가 - pop() : 스택에 (뒤쪽에) 있는 원소 삭제 (반환 x) - top() : 스택에서 끝에 있는 원소 반환 - empty() : 스택이..

zoosso.tistory.com

 → 덱(Deque)에서는 앞뒤로 push와 pop이 가능하다.

      물론 vector에서도 insert()와 erase() 에서 인자를 통해 가능하지만 성능이 좋지 못하다.

- vector가 연속된 메모리에 원소가 저장된다면

  deque는 여러 메모리 블록에 나눠 저장된다.

  그래서 vector에서는 앞쪽에 원소를 넣으면 기존의 원소를 밀어야 하는 단점이 있다.

 

관련 함수

- push_back(val): 뒤쪽에 val 원소 추가

- pop_back(): 뒤쪽 원소 제거

- push_front(val): 앞쪽에 val 원소 추가

- pop_front(): 앞쪽에 원소 제거

- front(): 제일 앞쪽에 위치한 원소

- back(): 제일 뒤쪽에 위치한 원소

- assign(size, val): size 크기 만큼 {val} 값으로 원소 초기화

#include <iostream>
#include <deque>

using namespace std;

int main() 
{
       deque<int> dq;
       deque<int> dq2(3); // 크기 = 3 만큼 생성해서 "0" 으로 초기화
       deque<int> dq3(5, 2); // 크기 = 5 만큼 생성해서 "1" 로 초기화

       dq.push_front(2);
       for (int i = 0; i < dq.size(); i++)
       {
              cout << dq[i] << " ";
       }
       cout << endl;

       // ------------------------------------
       dq2.push_back(6);
       for (auto it : dq2)
       {
              cout << it << " ";
       }
       cout << endl;

       // ------------------------------------
       dq3.pop_front(); dq3.pop_back();
       for (auto it : dq3)
       {
              cout << it << " ";
       }
       cout << endl;
       // 크기 = 2 만큼 "3" 으로 초기화
       dq3.assign(2, 3);
       for (auto it : dq3)
       {
              cout << it << " ";
       }
       cout << endl;
}

반응형

댓글