공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다. 틀린 부분에 대한 지적은 감사합니다. |
1. stack
스택(stack) 컨테이너는 vector 클래스를 기반으로 하며 stack 헤더파일을 include 해 사용한다. 스택의 메모리 구조는 LIFO(Last In First Out)를 따르는 자료구조 이다. DFS(Depth Firsth Search, 깊이우선탐색)나 특별한 알고리즘이 필요한 상황이 아니라 문제 상황을 구현하는데 LIFO의 구조를 가지고 있다고 판단되는 문제를 풀 때 사용된다.
문법)
#include <stack>
stack<타입> 스택명;
스택의 멤버함수를 확인하면 다음과 같다.
s.size() : s의 원소의 개수를 반환(메모리 용량이 아님)
s.empty() : s가 비어있는지 확인, 비어있으면 true를 반환한다.
s.top() : s의 제일 위에 위치한(제일 나중에 저장된) 원소를 반환
s.push(x) : s에 x값을 저장
s.pop() : s의 제일 위에 위치한(제일 나중에 저장된) 원소를 삭제(LIFO 이므로)
간단한 예시로 스택의 구조와 멤버 함수를 확인해보면
1 2 3 4 5 순서로 원소가 들어갔지만 나오는 것은 반대로 5 4 3 2 1의 순서로 LIFO의 메모리 구조를 확인할 수 있다.
2. queue
큐(queue) 컨테이너는 deque 클래스를 기반으로 하며 queue 헤더파일을 include 해 사용한다. 큐의 메모리 구조는 FIFO(First In First Out)를 따르는 자료구조 이다. BFS(Breadth First Search, 너비우선탐색)나 특별한 알고리즘이 필요한 상황이 아니라 문제 상황을 구현하는데 FIFO의 구조를 가지고 있다고 판단되는 문제를 풀 때 사용된다.
문법)
#include <queue>
queue<타입> 큐이름;
큐의 멤버 함수는 다음과 같다.
q.size() : q의 원소의 개수를 반환(메모리 용량이 아님)
q.empty() : q가 비어있는지 확인, 비어있으면 true를 반환한다.
q.front() : q의 맨 앞의(가장 먼저 저장된) 원소를 반환한다.
q.back() : q의 맨뒤의(가장 나중에 저장된) 원소를 반환한다.
q.push(x) : q에 x값을 저장
q.pop() : q의 맨 앞에 위치한(가장 먼저 저장된) 원소를 삭제(FIFO 이므로)
간단한 예시를 통해 queue를 확인해보면
1 2 3 4 5의 순서로 들어가면 1 2 3 4 5의 순서로 나오는 FIFO의 구조를 확인할 수 있다.
3. priority_queue
우선순위 큐(priority queue)는 queue와 똑같은 구조를 같는다. 차이점은 vector기반으로 구성되어 있으며 맨 앞의 원소가 가장 먼저 저장된 원소가 아니라 가장 큰 값을 가지는 원소가 된다. queue와 마찬가지로 queue 헤더파일을 include 해서 사용한다.
문법)
#include <queue>
priority_queue<타입> 우선순위큐명;
5 30 100 2 77 의 순서로 원소를 집어넣었는데 우선순위큐는 100 77 30 5 2로 값이 큰 순서로 정렬되어 저장되어 있는 것을 확인할 수 있다.
'언어 > C++' 카테고리의 다른 글
[C++ STL] 3-2. 컨테이너 - 연관 컨테이너(associate container) (0) | 2020.01.19 |
---|---|
[C++ STL] 3-1. 컨테이너 - 시퀀스 컨테이너(sequence container) (0) | 2020.01.16 |
[C++ STL] 2. STL 구성요소 간략정리 (0) | 2020.01.15 |
[C++ STL] 1-3. 템플릿 - 스마트 포인터(smart pointer) (0) | 2020.01.14 |
[C++ STL] 1-2. 템플릿 - 클래스 템플릿(class template) (0) | 2020.01.12 |
댓글