묻공러
[STL] deque
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (487)
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 (124)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
      • 유니티 (1)
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
C++/[루키스] STL

[STL] deque

2024. 3. 18. 11:34

시퀀스 컨테이너(Sequence Container)
데이터가 삽입 순서대로 나열되는 형태로
vector, list, deque가 있다

 


deque(double-ended queue)란?
양쪽 끝에서의 삽입과 삭제를 효율적으로 지원하는 자료 구조이다

deque는 큐(queue)와 벡터(vector)의 결합체로,

큐와 마찬가지로 FIFO(First-In-First-Out)의 특성을 가지고 있으면서도

벡터처럼 임의의 위치에서의 접근이 가능합니다.


deque는 블록(block)으로 구성되어 있으며,

각 블록은 일정 개수(일반적으로는 4개)의 요소를 저장하고

내부적으로 블록 간의 참조를 조정하여 삽입과 삭제를 효율적으로 수행할 수 있다

 


deque vs. vector
deque는 capacity가 존재하지 않는다
데이터가 추가될 때마다 que 블록이 추가되기 때문이다

 

그리고 아래의 코드를 통해 비교하면,

vector<int> v(4, 1);
deque<int> dq(4, 1);

v.push_back(2);
dq.push_back(2);

v.push_front(0);
dq.push_front(0);

 

1) push_back

vector의 경우 capacity를 초과해서 push_back을 하면

새로운 공간을 할당해서 전체 이동이 이루어진다

 

deque의 경우 현재 블록을 초과해서 push_back을 하면

새로운 블록을 할당해서 추가된 데이터만 그 블록에 들어간다  

 

2) push_front

vector의 경우 push_front을 하면

모든 데이터를 한 칸씩 뒤로 민다

 

deque의 경우 push_front을 하면

새로운 공간을 할당해서 추가된 데이터만 그 공간에 들어간다  

 


deque의 효율
1) 중간 삽입/삭제
중간에 데이터가 삽입/삭제될 때,
vector처럼 모든 데이터를 앞으로 뒤로 한 칸씩 다 당겨야 하기 때문에
매우 비효율적이다

2) 처음/끝 삽입/삭제
처음/끝에서 삽입은
que 블록을 맨 앞쪽/뒤쪽에 추가해 주면 된다


처음/끝에서 삭제는
que 블록의 맨 앞/맨 뒤 데이터만 지워주면 된다
이처럼 매우 효율적이다

3) 임의 접근
임의 접근을 할 때, 
모든 데이터들은 블록과 오프셋이 정해져 있기 때문에 
인덱스를 통해 쉽게 접근이 가능하다

저작자표시 비영리 변경금지 (새창열림)

'C++ > [루키스] STL' 카테고리의 다른 글

[STL] multimap, multiset  (0) 2024.03.21
[STL] set  (0) 2024.03.20
[STL] map  (0) 2024.03.19
[STL] list  (0) 2024.03.17
[STL] vector  (0) 2024.03.16
'C++/[루키스] STL' 카테고리의 다른 글
  • [STL] set
  • [STL] map
  • [STL] list
  • [STL] vector
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.