[STL] 덱 deque
Updated:
오늘은 STL 컨테이너 라이브러리 중 하나인 deque$($Double Ended Queue)에 대해서 알아보겠습니다. 이름에서 부터 짐작할 수 있듯이 deque는 큐와 같이 선형 리스트 형태이지만 삽입, 삭제가 front와 back에서 둘다 가능하다는 특징이 있습니다.
[STL] 덱의 맴버함수 및 사용
#include<deque> // 덱이 있는 헤더파일
deque<Data_type> dq;
- push_front$($) : 덱의 맨 앞에 원소 삽입
- push_back$($) : 덱의 맨 마지막에 원소 삽입
- pop_front$($) : 덱의 맨 앞 원소 삭제
- pop_back$($) : 덱의 맨 마지막 원소를 삭제
- size$($) : 덱의 총 원소 개수를 반환
- empty$($) : 덱이 비었으면 true, 아니면 false 반환
- assign$($) : 특정 원소로 덱을 채운다.
- clear$($) : 덱의 모든 원소를 삭제
- insert$($) : 특정 위치에 원소 삽입 $($주로 iterator 이용)
deque<Data_type>::iterator iterPos;
- erase$($) : 특정 위치의 원소나 지정 범위의 원소를 삭제
- begin$($) : 덱의 첫번째 원소의 랜덤 접근 반복자를 반환
- end$($) : 덱의 마지막 원소 다음의 반복자를 반환
- at$($) : 특정 위치의 원소의 참조를 반환
- front$($) : 덱의 첫번째 원소의 참조를 반환
- back$($) : 덱의 마지막 원소의 참조를 반환
- rbegin$($) : 역방향으로 첫번째 원소의 반복자를 반환
- rend$($) : 역방향으로 마지막 원소의 반복자를 반환
- reserve$($) : 지정된 크기의 저장공간을 확보
- swap$($) : 두개의 vector의 원소를 서로 맞바꿈
사용 예제
#include<iostream>
#include<deque>
using namespace std;
int main(void)
{
deque<int> dq;
deque<int>::iterator iter;
dq.push_front(2);
dq.push_front(1);
dq.push_back(3);
dq.push_back(4);
// dq [1 2 3 4]
cout<<"덱의 원소수 : "<<dq.size()<<'\n';
dq.pop_front(); // dq [2 3 4]
dq.pop_back(); // dq [2 3]
// 덱의 첫번째 원소에 접근
iter=dq.begin();
cout<<"덱의 첫번째 원소는 : "<<*iter<<'\n';
iter++;
cout<<"덱의 두번째 원소는 : "<<*iter<<'\n';
iter++;
dq.insert(iter,4); // dq [2 3 4]
cout<<"덱의 추가된 세번째 원소는 : "<<dq.back()<<'\n';
dq.erase(dq.begin()+1); // dq [2 4]
cout<<"덱의 2번째 위치의 원소 삭제 : ";
for(int i=0; i<dq.size(); i++) cout<<dq[i]<<' ';// dq [2 4]
cout<<'\n';
dq.push_front(1);
dq.push_back(5);
dq.push_back(6);
// dq [1 2 4 5 6]
dq.erase(dq.begin()+2, dq.end()); // dq의 3번째~마지막 원소 삭제
for(int i=0; i<dq.size(); i++) cout<<dq[i]<<' ';// dq [1 2]
dq.clear(); //덱의 모든 원소 삭제
if(dq.empty()) cout<<"\n덱이 비었습니다";
return 0;
}
결과
덱의 원소수 : 4
덱의 첫번째 원소는 : 2
덱의 두번째 원소는 : 3
덱의 추가된 세번째 원소는 : 4
덱의 2번째 위치의 원소 삭제 : 2 4
1 2
덱이 비었습니다
Leave a comment