C++ STL 정리 / Queue

Artiper
|2021. 1. 13. 15:09

stl의 Queue사용하기

우선 큐를 사용하려면 다음과 같이 queue를 포함시켜야 합니다.

#include <queue>

 

queue에 있는 멤버함수 목록은 다음과 같습니다.

(생성자) 큐 생성자
empty 컨테이너가 비어 있는지 테스트
size 큐의 요소수를 리턴함.
front 맨 앞에 있는 요소에 접근
back 맨 뒤에 있는 요소에 접근
push 큐의 끝에 요소를 삽입한다.
emplace(c++11) 큐의 끝에 요소를 삽입한다.
pop 큐의 처음에 있는 요소를 빼낸다.
swap(c++11) 매개변수에 있는 큐와 멤버변수를 호출한 큐의 데이터 바꿈.

사용예제

empty

선언 형태

 bool empty() const;

Return value

 bool값이 return type인 것을 확인가능합니다.

 

사용법

 q.empty()

 

size

선언 형태

 size_type size() const;

Return value

 size_type : 멤버 유형 size_type은 부호없는 정수 유형입니다.

 

사용법

int size = q.size();

 

front

선언 형태

reference& front();
const_reference& front() const;

멤버 유형 reference 및 const_reference는 동일한 이름을 가진 기본 컨테이너 유형의 별칭(alias)입니다.

 

Return value

큐의 다음 요소에 대한 참조(refrence)입니다. 

 

사용법

std::cout << q.front();

 

back

선언 형태

 reference& back();
 const_reference& back() const;

Return value

큐의 마지막 요소에 대한 참조입니다.

 

사용법

 std::cout << q.back();

 

emplace

선언 형태

template <class... Args> void emplace (Args&&... args);

Return value

없습니다.

 

사용법 (push와 같은 역할)

  std::queue<std::string> myqueue;

  myqueue.emplace ("First sentence");
  myqueue.emplace ("Second sentence")

 

Lvalue 참조 선언 자: &

다음에 대 한 자세한 정보: Lvalue 참조 선언 자: &

docs.microsoft.com

push와 emplace의 차이를 알고 싶어서 이것저것 확인하다가 선언형태를 확인했었습니다. const value_type&의 뜻은 위 링크를 보면 확인할 수 있는데, 요약하자면 alias하는 기능인 것 같습니다. 선언형태를 보고 차이점을 알고 싶었는데, 아직 어려운 부분이라 우선 넘기기로 했습니다. 대신 emplace에 대해 잘 설명해놓은 블로그 링크를 첨부합니다.

 

[C++] emplace 함수

문제를 풀다가 다른 사람 코드를 봤더니 queue를 쓰던 map을 쓰던 새로운 요소 혹은 객체를 삽입할 때 make_pair, make_tuple을 이용해 객체를 만들고 push 하는 것이 아니라 그냥 emplace 함수를 이용해 간

suhwanc.tistory.com

 

pop

선언 형태

void pop();

 

Return value

없습니다.

 

사용법

q.pop();

 

swap

선언 형태

void swap (queue& x) noexcept(/*see below*/);

 

Return value

없습니다.

 

사용법

q1.swap(q2)

 

사용예제2

#include <iostream>
#include <queue>
#include <string>

int main()
{
	std::queue<int> q;
	// Generic되어 있기에 이와 같이 string처럼 다른 타입도 사용가능함.
	std::queue<std::string> strq; 
	
	q.push(1);
	q.push(2);
	q.push(3);

	while (q.empty() != true) {
		std::cout << q.front() << std::endl;
		q.pop();
	}

	return 0;
}