본문 바로가기
Programming/C C++

C++ STL Deque 컨테이너

by whitele 2021. 5. 27.
반응형

 Deque

 deque는 vector 컨테이너와 아주 유사한 컨테이너로 순차 컨테이너(sequence container)이다. Vector와 크게 다르지 않으며 다른 점은 메모리 블록 할당 정책이다. Vector는 원소가 추가될 때마다 메모리를 재할당하고 복사 과정이 일어나는데 deque는 새로운 메모리를 할당하여 원소를 추가한다.

생성자

  • deque<T> dq : 빈 deque를 생성
  • deque<T> dq(n) : n만큼의 크기의 deque 생성
  • deque<T> dq(n, x) : x로 채워진 n만큼의 크기를 생성

멤버 함수

  • assign(n, x) : x값으로 n개 할당
  • at(i) : i번째 원소를 참조
  • front() : 첫 번째 원소 참조
  • back() : 마지막 원소 참조
  • begin() : 처음을 가리키는 반복자
  • end() : 마지막을 가리키는 반복자
  • rbegin() : 역순 차열의 첫 원소를 가리키는 반복자
  • rend() : 역순차열의 마지막 원소를 가리키는 반복자
  • clear() : 모든 원소 제거
  • empty() : 원소가 비었는지 검사
  • erase() : x가 가리키는 원소를 제거
  • erase(a, b) : a~b [a, b) 구간 원소를 제거한다.
  • insert(a, n, x) : a가 가리키는 곳에 n만큼 x를 삽입한다.
  • max_size() : 해당 deque가 넣을 수 있는 최대 원소 개수 반환
  • pop_front() : 첫 원소 제거
  • pop_back() : 마지막 원소 제거
  • push_front(x) : x를 맨 앞에 추가
  • push_back(x) : x를 맨 뒤에 추가
  • resize(n) : 크기를 n으로 변경
  • resize(n, x) : 크기를 n으로 변경 새로운 공간은 x로 초기화
  • size() : 원소의 개수
  • swap(deque2) : deque2와 스왑

deque의 연산자

  • 비교 연산자 : ==,!=, <, <=, >, >=
  • 인덱스 연산자: []

deque 예제 코드

#include <iostream>
#include <deque>
using namespace std;
int main(){
	deque<int> dq;
	for(unsigned int i=0;i<10;i++)//unsigned int => deque<int>::size_type
	{
		dq.push_back(i);
		dq.push_front(i*(-1));
	}
	for(unsigned int  i=0;i<dq.size();i++)
		cout<<dq[i]<<endl;
	
	return 0;
}

실행예

push_back으로 i를 뒤에 추가하고 push_front로 앞에 -i를 추가하는 모습이다.

정리

 deque는 앞뒤 모두 추가할 수 있는 멤버 함수를 제공하며 vector보다는 성능적으로 우수하다. vector는 단순히 배열 그 자체처럼 동작하지만 deque는 배열 기반으로 더 효율적으로 동작한다. at() 함수는 [] 연산자와 기능이 같지만 범위 검사한다는 차원에서 다르다. [] 연산자는 범위 검사를 하지 않기 때문에 속도가 더 빠르다.

728x90
반응형

댓글