본문 바로가기
Language & Framework & GIT/C++

[C++] Queue 간단 정리

by veganwithbacon 2023. 11. 27.
반응형

  Queue

FIFO(First In, First Out) 방식 동작

 

✅queue container는 deque와 list container에 붙어 사용 가능하다.(vector container 불가능)

 

vector container가 불가능한 이유 : FIFO 특성상 vector는 앞에서 빼는 동작을 지원해 주지 않기 때문.

 

내부적으로 deque, list container로 구현되어 있으나, queue 구조로 동작하도록 멤버 함수를 제공해주는 것이다.

 

default는 deque container 기반으로 설정

 

1. queue container 사용법

- < queue > 헤더파일 안에 있다.

 

- using namespace std; 이름 공간을 사용해주면 편리하다.

2. queue container 생성자와 연산자

ex) 

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] > [변수이름];

 

3. queue container 멤버 함수

 

  • 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를 사용해야한다.

 

ex) queue <int, list<int> > q;

ex) queue <string, list<string> > q;

 

 

추가 및 삭제

1. push(element) : 큐에 원소를 추가(뒤에)

2. pop() : 큐에 있는 원소를 삭제(앞에)

 

조회

1. front() : 큐 제일 앞에 있는 원소를 반환

2. back() : 큐 제일 뒤에 있는 원소를 반환

 

기타

1. empty() : 큐가 비어있으면 true 아니면 false를 반환

2. size() : 큐 사이즈를 반환

#include <iostream>
#include <queue>
 
using namespace std;
 
int main(){
	// 큐 생성
	queue<int> q;
 
	// push
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(4);
	q.push(5);
	q.push(6);
 
	// pop
	q.pop();
	q.pop();
	q.pop();
 
	// front
	cout << "front element : " << q.front() << '\n';
 
	// back
	cout << "back element : " << q.back() << '\n';
 
	// size
	cout << "queue size : " << q.size() << '\n';
 
	// empty
	cout << "Is it empty? : " << (q.empty() ? "Yes" : "No") << '\n';
 
	return 0;
}

 

 

---------------

이번주 지나고 나서 블로깅 다시 하도록 하겠습니다.

할게 많아서 신경쓸게 너무 많네요 ㅠ

 

참고 링크 :  https://blockdmask.tistory.com/101

반응형

댓글