데큐는 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
[출처] C++, STL 시퀀스 컨테이너 데큐(deque)|작성자 jhh0712
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
C 정렬 코드 (0) | 2022.07.20 |
---|---|
컨테이너 어댑터 (스택, 큐, 우선순위 큐) (0) | 2022.07.04 |
선형(Linear) / 비선형(Non Linear) 자료구조 (0) | 2022.07.01 |
그래프 개념 (0) | 2022.07.01 |
시간 복잡도 (Time Complexity)와 공간 복잡도 (Space Complexity) (0) | 2022.06.26 |