Programming/C++

C++ STL 덱(deque) 사용법

몽땅마니아(MDD) 2021. 10. 22. 21:48

덱(dequeue, Double Ended Queue)

큐와 달리 선입선출(FIFOI)가 아닌 front, back 양쪽 모두 삽입, 삭제가 가능하며 front,back위치가 아닌 원소도 조회가 가능하다.

#include <deque> 헤더파일을 필요로 함

 

덱 선언

deque<데이터타입> 덱이름;

 

덱 back위치에 원소 삽입

push_back(원소);

 

덱 front위치에 원소 삽입

push_front(원소);

 

덱 front위치의 원소 삭제

pop_front();

 

덱 back위치의 원소 삭제

pop_back();

 

덱 첫 번째 원소 반환

front();

 

덱 마지막 원소 반환

back();

 

덱이 비어있는지 확인 (0,1)

empty();

 

덱의 사이즈 반환(숫자)

size();

 

덱의 n번째 인덱스 원소 반환

at(인덱스);

 

덱에서 표현되는 iterator 

begin();  // 맨 앞 원소 위치를 나타내는 iterator

end();  // 맨 뒤 원소 위치를 나타내는 iterator

 

원하는 위치에 원소a 삽입

insert(iterator로 표현된 인덱스. 원소a);    //인덱스는 iterator로 표현해야 함

 

원하는 위치의 원소 삭제

erase(iterator로 표현된 인덱스);

 

원소 n개를 a로 초기화

assign(n, a);    //기존에 있던 원소들도 초기화

 

덱 내 모든 원소 삭제, 초기화

clear();

 

덱 메모리 공간사이즈 변경 (늘어난 부분은 0으로 초기화)

resize();

 

 

#include <iostream>
#include <deque> //덱을 사용하기 위한 헤더파일

using namespace std;

int main() {
	deque<int> deq; //덱 선언 - deque<데이터타입> 덱이름;

	deq.push_back(1); deq.push_back(2); //덱 back위치에 원소 삽입 - push_back(원소);
	deq.push_front(3); deq.push_front(4); //덱 front위치에 원소 삽입 - push_front(원소);
	// 덱 내 원소 위치 : 4, 3, 1, 2
	deq.pop_front(); //덱 front위치의 원소 삭제 - pop_front();
	// 원소 4 삭제
	deq.pop_back(); //덱 back위치의 원소 삭제 - pop_back();
	// 원소 2 삭제

	cout << deq.front() << endl; //덱 첫 번째 원소 반환 - front();
	// 출력 : 3
	cout << deq.back() << endl; //덱 마지막 원소 반환 - back();
	// 출력 : 1
	cout << deq.empty() << endl; //덱이 비어있는지 확인 (0,1) - empty();
	// 출력:  0 (false)
	cout << deq.size() << endl; //덱의 사이즈 반환(숫자) - size();
	// 출력 : 2
	cout << deq.at(0) << endl; //덱의 n번째 인덱스 원소 반환 - at(인덱스);
	// 출력 3
	deq.insert(deq.begin()+1, 5); //원하는 위치에 원소a 삽입 - insert(iterator로 표현된 인덱스. 원소a); //인덱스는 iterator사용해야 함)
	cout << deq.at(1) << endl; //5가 제대로 들어갔는지 확인
	//출력 : 5
	deq.erase(deq.begin()); //원하는 위치의 원소 삭제 - erase(iterator로 표현된 인덱스)
	cout << deq.front() << endl; //맨 앞 원소였던 3이 제대로 삭제됐는지 확인
	//출력 : 5
	deq.assign(2, 7); // 원소 n개를 a로 초기화 - assign(n, a); //기존에 있던 원소들도 초기화
	// 덱 : 7 7
	cout << deq.at(0) << " " << deq.at(1) << endl; // 현재 덱의 size가 2이므로 2이상의 인덱스 접근 불가
	// 출력 : 7 7

	deq.clear(); //덱 내 모든 원소 삭제, 초기화
	return 0;
}

'Programming > C++' 카테고리의 다른 글

C++ STL 페어(pair) 사용법  (0) 2021.10.22
C++ STL 벡터(vector) 사용법  (0) 2021.10.22
C++ STL 큐(queue) 사용법  (0) 2021.10.22
C++ STL 스택(stack) 사용법  (0) 2021.10.22
[C++] cin, cout 시간 줄이기  (0) 2021.09.20