앞에서 배열을 이용해 덱을 직접 구현해보았다.
이번에는 C++에서 제공하는 표준 템플릿 라이브러리(STL)을 이용해보자.
STL은 프로그래밍에서 공통적으로 사용되는 자료구조와 알고리즘에 대한 클래스이다.
템플릿을 기반으로 작성되었기 때문에 어떤 자료형(사용자 정의 자료형 포함)에도 사용할 수 있다.
덱 템플릿 deque을 사용하려면 소스 코드에 헤더파일을 포함시키면 된다.
#include <deque>
using namespace std;
// deque<자료형> 이름;
deque<data_type> deque_name;
deque의 멤버 함수
void push_front (const value_type& val);
void push_front (value_type&& val);
deque의 가장 앞 쪽에 전달받은 val을 삽입한다.
void push_back (const value_type& val);
void push_back (value_type&& val);
deque의 가장 뒤 쪽에 전달받은 val을 삽입한다.
void pop_front();
deque의 가장 앞 쪽 데이터를 삭제한다. (직접 구현했을 때와 달리 삭제 후 반환하지 않음)
void pop_back();
deque의 가장 뒤 쪽 데이터를 삭제한다. (직접 구현했을 때와 달리 삭제 후 반환하지 않음)
reference front();
const_reference front() const;
deque의 가장 앞 쪽 데이터를 반환한다.
reference back();
const_reference back() const;
deque의 가장 뒤 쪽 데이터를 반환한다.
size_type size() const noexcept;
deque의 요소 개수를 반환한다.
bool empty() const noexcept;
deque이 비어있다면 true, 비어있지 않다면 false를 반환한다.
(이외에도 deque의 멤버 함수가 있지만 생략했음, 아래 링크에서 다른 멤버 함수들도 확인할 수 있음)
https://cplusplus.com/reference/deque/deque/
https://cplusplus.com/reference/deque/deque/
difference_typea signed integral type, identical to: iterator_traits ::difference_type usually the same as ptrdiff_t
cplusplus.com
STL 덱 활용
https://www.acmicpc.net/problem/10866
10866번: 덱
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
STL 덱을 활용해 백준 10866번 덱 기본 문제를 풀어보았다.
#include <iostream>
#include <deque>
#include <string>
using namespace std;
#define endl '\n'
int N;
deque<int> dq;
string command;
int main() {
cin.tie(NULL); ios_base::sync_with_stdio(false);
cin >> N;
while (N--) {
cin >> command;
if (command == "push_front") {
int X; cin >> X;
dq.push_front(X);
}
else if (command == "push_back") {
int X; cin >> X;
dq.push_back(X);
}
else if (command == "pop_front") {
if (dq.empty()) cout << -1 << endl;
else {
cout << dq.front() << endl;
dq.pop_front();
}
}
else if (command == "pop_back") {
if (dq.empty()) cout << -1 << endl;
else {
cout << dq.back() << endl;
dq.pop_back();
}
}
else if (command == "size") {
cout << dq.size() << endl;
}
else if (command == "empty") {
cout << dq.empty() << endl;
}
else if (command == "front") {
if (dq.empty()) cout << -1 << endl;
else cout << dq.front() << endl;
}
else {
if (dq.empty()) cout << -1 << endl;
else cout << dq.back() << endl;
}
}
return 0;
}
'Computer Science > Data Structure' 카테고리의 다른 글
4-2. 연결 리스트란? (0) | 2023.07.11 |
---|---|
4-1. [C++] 연결 리스트를 위한 준비(자기 참조, 동적 메모리 할당) (0) | 2023.07.10 |
3-5. [C++] 큐 STL (0) | 2023.07.05 |
3-4. [C++] 배열로 구현한 덱 (0) | 2023.07.05 |
3-3. [C++] 배열로 구현한 큐 (0) | 2023.07.05 |