std::deque
(double-ended queue)는 양쪽 끝에서 빠른 삽입과 삭제를 허용하는 인덱스 기반 시퀀스 컨테이너입니다. 또한, deque의 어느 쪽 끝에서든 삽입과 삭제를 수행해도 나머지 요소들에 대한 포인터나 참조가 무효화되지 않습니다.
std::vector
와 달리, deque의 요소들은 연속적으로 저장되지 않습니다: 일반적인 구현은 개별적으로 할당된 고정 크기 배열들의 시퀀스와 추가적인 부기 작업을 사용하며, 이는 deque의 인덱스 접근이 두 번의 포인터 역참조를 수행해야 함을 의미합니다. 이는 vector의 인덱스 접근이 단 한 번의 역참조만 수행하는 것과 대비됩니다.
deque의 저장 공간은 필요에 따라 자동으로 확장 및 축소됩니다. deque의 확장은 기존 요소들을 새로운 메모리 위치로 복사하는 과정을 수반하지 않기 때문에
std::vector
의 확장보다 비용이 적게 듭니다. 반면에, deque는 일반적으로 큰 최소 메모리 비용을 가지며, 단 하나의 요소만 보유하는 deque도 전체 내부 배열을 할당해야 합니다 (예: 64비트 libstdc++에서는 객체 크기의 8배, 64비트 libc++에서는 객체 크기의 16배 또는 4096바이트 중 더 큰 값).
요소에 부과되는 요구사항은 컨테이너에서 수행되는 실제 연산에 따라 다릅니다. 일반적으로 요소 타입이 완전한 타입이어야 하며
Erasable
요구사항을 충족해야 하지만, 많은 멤버 함수들은 더 엄격한 요구사항을 부과합니다.
(C++11 이후)
Allocator
-
메모리를 획득/해제하고 해당 메모리에서 요소를 생성/소멸시키는 데 사용되는 할당자. 이 타입은
Allocator
요구사항을 충족해야 합니다.
정의되지 않은 동작
(C++20 이전)
프로그램이 ill-formed
(C++20 이후)
입니다
Allocator::value_type
이
T
와 동일하지 않은 경우.
반복자 무효화
이 섹션은 불완전합니다
이유: 이 섹션에는 여전히 몇 가지 부정확한 내용이 있으며, 더 자세한 내용은 개별 멤버 함수 페이지를 참조하십시오
#include <deque>#include <iostream>int main(){// 정수를 포함하는 deque 생성
std::deque<int> d ={7, 5, 16, 8};// deque의 시작과 끝에 정수 추가
d.push_front(13);
d.push_back(25);// deque의 값들을 순회하며 출력for(int n : d)std::cout<< n <<' ';std::cout<<'\n';}