안녕하세요! BlockDMask 입니다.
오늘은 Container Adapter (stack, queue, priority queue)중
두번째인 queue container adapter에 대해 정리해보겠습니다.
0. queue container
FIFO (First in, First out) 방식으로 동작 됩니다.
queue container는 deque와 list container 에 붙어서 사용 가능합니다. (vector container 불가능.)
vector container가 불가능한 이유 : queue 자료구조 특성상 뒤에서 삽입하고 앞에서 빼야하는데(FIFO) vector는 앞에서 빼는 동작을 지원해 주지 않기 때문입니다.내부적으로 deque, list container 로 구현이 되어있습니다. 하지만 queue 구조로 동작하도록 멤버 함수를 제공해주는 것 입니다.
default 는 deque container 기반으로 설정 되어있습니다.
1. queue container 사용법
<queue> 헤더파일 안에있습니다.
using namespace std; 이름 공간을 사용해주면 편리합니다.
2. queue container 생성자와 연산자
템플릿 선언부를 보겠습니다.
template < typename T, typename Container = deque<T> >
class queue;기본 생성자 형식은 queue< [Data Type]> [변수이름]; 입니다.
ex) queue<int> q;
ex) queue<string> q;내부 컨테이너 구조를 바꾸는 생성자 형식은
queue< [Data Type], [Container Type] > [변수이름]; 입니다.
ex) queue<int, list<int> > q;
ex) queue<string, list<string> > q;
value_type& front();
- access first element
- 첫번째 원소에 접근합니다. (첫번째 원소 참조)
- 첫번째 원소라는 것은 곧 나올 원소 (pop 하면 나올 원소)
- 들어간지 가장 오래된 원소.
- const value_type& front() const;
value_type& back();
- access last element
- 마지막 원소에 접근합니다. (마지막 원소 참조)
- 마지막 원소라는 것은 방금 들어간 원소 (push를 막 마친 원소)
- 가장 최근에 들어간 원소
- const value_type& back() cont;
bool empty() const;
- check whether container is empty
- 비어있으면 true.
- size() 가 0 이면 true.
- size_type size() cont:
- return size
- 원소의 갯수 = size 를 반환합니다.
- void push(const value_type& val);
- Insert a new element
- 초기화된 원소를 queue 안에 집에 넣는다.
- 맨뒤에 원소를 집어 넣는다.
- void pop()
- Remove the first element
- Remove the oldest element
- 들어간지 가장 오래된 원소를 삭제한다. = 맨 앞에 있는 원소를 삭제한다.
- 반환형 void 이므로 앞의 원소를 참조하려면 front를 사용해야합니다.
- C++ 11 ( emplace, swap ) 이 존재합니다.
4. queue container 예제
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include<iostream> #include<queue> using namespace std; int main(void){ queue<int> q; cout << endl << "=== empty ===" << endl; cout << "size : " << q.size() << endl; cout << "empty : " << q.empty() << endl; q.push(10); q.push(20); q.push(30); q.push(40); q.push(50); q.push(60); cout << endl << "=== push ===" << endl; cout << "size : " << q.size() << endl; cout << "empty : " << q.empty() << endl; cout << "front : " << q.front() << endl; cout << "back : " << q.back() << endl << endl; cout << endl << "=== front & pop ===" << endl; while(!q.empty()){ cout << q.front() << endl; q.pop(); } return 0; } | cs |
결과
'<개인공부> > [C++]' 카테고리의 다른 글
[C++] static_cast (타입캐스트 연산자) (4) | 2017.11.28 |
---|---|
[C++] sort algorithm 정리 및 예시 (6) | 2017.10.17 |
[C++] 레퍼런스, Reference, 참조자 (0) | 2017.09.23 |
[C++] priority_queue container 정리 및 사용법 (4) | 2017.08.04 |
[C++] stack container 정리 및 사용법 (0) | 2017.08.02 |
[C++] multimap container 정리 및 사용법 (2) | 2017.07.29 |
[C++] map container 정리 및 사용법 (10) | 2017.07.28 |
[C++] multiset container 정리 및 사용법 (0) | 2017.07.27 |