DEQUE : 시퀸스(순차열) 컨테이너 , 배열컨테이너
- 접근반복자를 지원하는 배열 기반 컨테이너
- vector와 다른 점은 원소가 메모리 블록에 연속하게 저장되지만, 하나의 메모리블록이 아닌 여러메모리 블록에 나뉘어 저장된다 (메로리 블록이 여러개로 나뉘어 저장?)
- 그래서 앞이나 뒤쪽에 모두 추가 할수가 있다.
- 배열기반 컨테이너는 삽입과 제거 동작이 발생하면 메모리가 재할당 되거나 원소가 이동할 수 있으므로, 반복자가 무효로 된다.
- 4개 이후 다른 메모리 블록에 저장됨? 벡터처럼 매번 재할당해서 넣는게 아니라, 메모리블록이 다 차면, 다음 메모리블록 만들때만 할당한다
- 벡터는 새로운 원소를 삽입할 떄 할당된 메모리가 부족하면 이전 메모리블록을 삭제하고 새로운 메모리블록을 재할당하며 이전 원소를 모두 복사하지만, 데큐는 새로운 단위의 메모리 블록을 할당하고 원소를 삽입한다.
- 큐 구조라서 한재 메모리블록 앞에 새로운 메모리블록을 할당 할수가 있다
- 반복자는 반드시 기존의 포인터 터압아 어나러 수머투 ㅍㅎ안토여 헌더. 왜냐하면 다른 메모리 블록으로 이동을 할 수 있어야 하기 때문이다.
- 벡터와 달리 용량관련 함수 제공없음 (capacity, reserve)
데큐 구조 이미지
샘플 1 , 뒤로 넣어다가, 제일 앞 , 중간(앞공간)에 삽입할 경우 -> 제일 앞공간 메모리 추가
m_deque.push_back(1);
m_deque.push_back(2);
m_deque.push_back(3);
m_deque.push_front(4);
iter = m_deque.begin();
iter++;
m_deque.insert(iter,7);
샘플 2 , 뒤로 넣어다가, 제일 앞 , 중간(뒷공간)에 삽입할 경우 -> 제일 뒷공간 메모리 추가
m_deque.push_back(1);
m_deque.push_back(2);
m_deque.push_back(3);
m_deque.push_front(4);
iter = m_deque.begin();
iter++;
iter++;
iter++;
m_deque.insert(iter,7);
'프로그래밍 > STL' 카테고리의 다른 글
Map / MuitlMap (0) | 2019.04.30 |
---|---|
Set / MutilSet (0) | 2019.04.30 |
LIST (0) | 2019.04.30 |
VECTOR (0) | 2019.04.30 |
STL (Standard Template Library) (0) | 2019.04.30 |