티스토리 뷰

c++/개념

deque - 덱

백수진 2021. 3. 22. 00:37

덱은 양방향에서 삽입 삭제가 이루어지며 그렇기에 queue로 사용이가능하다.

c++에서의 덱의 사용은 메모리를 알아서 관리해주기 때문에 메모리 사용에 유리하다.

 

<덱의 사용법>

1. deque 헤더파일을 include함.

#include <deque>

 

2. 선언

deque <자료형> 덱이름;

 

3. 삽입기능

if ) deque <int> d;

- front에 삽입

d.push_front(삽입하려는 수)

- back에 삽입

d.push_back(삽입하려는 수)

 

4. 삭제기능

if ) deque <int> d;

-front삭제(큐 기능)// 맨 위의 값을 반환하는 것은 d.front()

d.pop_front();

-back삭제(스택 기능)// 맨 위의 값을 반환하는 것은 d.back()

d.pop_back();

 


연습해보기

#include <stdio.h>
#include <deque>
using namespace std;

int main()
{
	deque<int> ss;

	ss.push_back(3);
	ss.push_back(4);
	ss.push_back(6);
	ss.push_back(9);
	ss.push_back(12);

	for (int i = 0; i < ss.size(); i++)
		printf("%d ", ss[i]);
	printf("\n");

	ss.pop_back();
	ss.pop_front();

	ss.push_front(34);
	ss.push_front(38);

	for (int i = 0; i < ss.size(); i++)
	{
		printf("%d ", ss[i]);
	}
	printf("\n");
	return 0;
}

<개념 연습문제>

 

 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

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

int main()
{
	deque <int> dq;

	int n;
	cin >> n;

	string str;
	int a;
	for (int i = 0; i < n; i++)
	{
		cin >> str;
		if (str == "push_front")
		{
			cin >> a;
			dq.push_front(a);
		}
		if (str == "push_back")
		{
			cin >> a;
			dq.push_back(a);
		}
		if (str == "pop_front")
		{
			if (dq.size() == 0)
			{
				printf("-1\n");
			}
			else
			{
				cout << dq.front()<<'\n';
				dq.pop_front();
			}
		
		}
		if (str == "pop_back")
		{
			if (dq.size() == 0)
			{
				cout << "-1"<<'\n';
			}
			else
			{
				cout << dq.back() << '\n';
				dq.pop_back();
			}
		}
		if (str == "size")
		{
			cout << dq.size()<<'\n';
		}
		if (str == "empty")
		{
			if (dq.size() == 0)
			{
				cout << "1" << '\n';
			}
			else
				cout << "0" << '\n';
		}
		if (str == "front")
		{
			if (dq.size() == 0)
			{
				cout << "-1" << '\n';
			}
			else
				cout << dq.front() << '\n';
		}
		if (str == "back")
		{
			if (dq.size() == 0)
			{
				cout << "-1" << '\n';
			}
			else
				cout << dq.back() << '\n';
		}
	}
}

 

'c++ > 개념' 카테고리의 다른 글

pair  (0) 2021.03.21
스택 컨테이너 사용법  (0) 2021.03.21
2차원 vector  (0) 2021.03.21