CS/자료구조 & 알고리즘

[C++] Deque 데크

ShovelingLife 2022. 7. 4. 10:24

데큐는 double-ended queue의 약어이다. 즉, 양방향으로 입출력이 가능한 큐이다. (큐는 한쪽방향으로만 입력이 가능하고 반대방향으로 출력이 가능하다).

#include<iostream>
#include<deque>
using namespace std;

int main()
{
  deque<int> dq;

  for(int i = 1; i <= 10; i++){
     if(i & 1) dq.push_front(i);
     else dq.push_back(i);
  }

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

  return 0;
}

결과 값 :

9 7 5 3 1 2 4 6 8 10

홀수는 앞에서 입력을 했고, 짝수는 뒤에서 입력을 해서 위와 같은 결과가 나오게 된다.

 

iterator를 활용한 예제

#include<iostream>
#include<deque>
using namespace std;

int main()
{
  deque<int> dq;

  for(int i = 1; i <= 10; i++){
     if(i & 1) dq.push_front(i);
     else dq.push_back(i);
  }

  deque<int>::iterator iter;
  for(iter = dq.begin(); iter != dq.end(); iter++){
    cout << *iter << " ";
  }
  cout << endl;

  return 0;
}

결과 값 :

9 7 5 3 1 2 4 6 8 10

똑같은 결과가 나오는 것을 확인할 수 있다.

생성자

deque<type> dq
빈 컨테이너 dq
deque<type> dq(n)
0으로 초기화된 n개의 원소를 갖는 데큐 dq
dequer<type> dq(n, x)
x로 초기화된 n개의 원소를 갖는 데큐 dq
deque<type> dq(iterator begin, iterator end)
iterator begin 부터 end 구간으로 초기화된 원소를 갖는 데큐 dq

 

멤버 함수

dq.assign(n, x)
dq.assign(iterator begin, iterator end)
기존 데큐 요소를 지우고 데큐를 복사
dq.at(index)
데큐의 지정된 위치에 있는 요소를 참조 반환
dq.back()
데큐의 마지막 요소에 대한 참조 반환
iter = dq.begin()
데큐의 첫 번째 요소에 대한 임의 액세스 반복자를 반환
dq.capacity()
데큐에 할당된 공간(capacity) 크기를 반환
dq.clear()
데큐의 모든 요소를 지움
dq.emplace(iterator i, x)
내부에서 생성된 요소를 데큐의 지정된 위치에 삽입
dq.emplace_back(x)
생성된 요소를 데큐의 끝에 추가
dq,emplace_front(x)
생성된 요소를 데큐의 시작부분에 추가
dq.empty()
데큐 컨테이너가 비어 있는지 조사
iter = dq.begin()
데큐 끝을 가리키는 임의 액세스 반복기를 반환
dq.erase(iterator i)
dq.erase(iterator begin, iterator end)
데큐의 지정된 위치에서 요소 또는 요소 범위를 제거
dq.front()
데큐의 첫 번째 요소에 대한 참조를 반환
dq.insert(iterator i, x)
dq.insert(iterator i, n, x)
dq.insert(iterator begin, iterator end, iterator i)
요소 또는 요소의 수 만큼을 데큐의 지정된 위치에 삽입
dq.max_size()
데큐의 최대 허용 길이를 반환
dq.pop_back()
데큐의 끝에 있는 요소를 삭제
dq.pop_front()
데큐의 시작 부분에 요소를 삭제
dq.push_back(x)
데큐 끝에 요소를 추가
dq.push_front(x)
데큐 시작 부분에 요소를 추가
dq.resize(n)
dq.resize(n, x)
데큐의 새 크기를 지정
dq.size()
데큐에 있는 요소 수를 반환
dq1.swap(dq2)
두 데큐의 요소를 교환

데큐 멤버함수들을 활용한 예제

#include<iostream>
#include<deque>
using namespace std;

int main()
{
	deque<int> dq;

	for (int i = 1; i <= 10; i++) {
		if (i & 1) dq.push_front(i);
		else dq.push_back(i);
	}

	deque<int>::iterator iter;
	cout << "원본" << endl;
	for (iter = dq.begin(); iter != dq.end(); iter++) {
		cout << *iter << " ";
	}
	cout << endl;
	cout << "5 제거" << endl;
	for (iter = dq.begin(); iter != dq.end(); iter++) {
		if (*iter == 5) {
			dq.erase(iter);
			break;
		}
	}

	for (iter = dq.begin(); iter != dq.end(); iter++) {
		cout << *iter << " ";
	}
	cout << endl;

	cout << "5 삽입" << endl;
	for (iter = dq.begin(); iter != dq.end(); iter++) {
		if (*iter == 2) {
			dq.insert(iter, 5);
			break;
		}
	}

	for (iter = dq.begin(); iter != dq.end(); iter++) {
		cout << *iter << " ";
	}
	cout << endl;

	return 0;
}

결과 값 :

원본 9 7 5 3 1 2 4 6 8 10 5
제거 9 7 3 1 2 4 6 8 10 5
삽입 9 7 3 1 5 2 4 6 8 10