반응형
개요
C++에서는 큐 자료구조를 갖는 컨테이너 어댑터로 표준 라이브러리의 queue를 사용할 수 있습니다.
queue<int> q;
queue는 요컨대 선입선출의 특징을 가지며, 주로 비슷하지만 후입선출(LIFO)의 특징을 갖는 std::stack과 비교됩니다. std::stack의 주요 특징은 아래 링크의 글에서 자세히 확인할 수 있습니다.
[C++] std::stack
개요 C++에서는 스택 자료구조를 갖는 컨테이너로 표준 라이브러리의 stack을 사용할 수 있습니다.stack st; stack은 요컨대 후입선출의 특징을 가지며, 주로 선입선출의 특징을 갖는 std::queue와 비교
hyeokjunjjang.tistory.com
특징
- 컨테이너 어댑터 (Container Adapter)
- 큐의 자료구조를 사용하면서 실제로 저장되는 컨테이너 형식을 선택할 수 있습니다.
- 기본적으로 std::deque를 사용하고, 그 외에도 list, vector 등 다른 컨테이너를 사용할 수도 있습니다.
- 선입선출 (FIFO; First In First Out)
- 가장 먼저 삽입된 데이터부터 제거됩니다.
- 임의/순차적인 접근 제한
- 양방향 구조로 구성되어 양 끝(front / back)에 있는 데이터에만 접근할 수 있습니다.
- 따라서 queue는 iterator를 지원하지 않으며, 컨테이너 내의 모든 요소를 순회하기 어렵습니다.
- 빠른 삽입 및 삭제
- 데이터 삽입과 삭제는 양 끝(front / back)에서만 수행되기 때문에 작업이 비교적 빠른 시간에 수행됩니다.
헤더
#include <queue>
queue를 사용하기 위해서 <queue> 헤더를 포함해야 합니다.
선언 및 초기화
템플릿 매개변수
queue<_Ty, _Container = deque<_Ty>>
queue는 타입을 선언할 때, 최대 2개의 템플릿 매개변수를 받습니다.
- _Ty은 실제 저장되는 데이터의 형식을 나타냅니다.
- _Container는 큐 자료구조를 사용할 컨테이너를 나타냅니다. 지정하지 않으면 기본적으로 std::deque 컨테이너를 사용합니다.
생성자
queue<_Ty> q;
queue를 선언하면 빈 상태의 큐 컨테이너를 선언할 수 있습니다. 추가로 queue는 중괄호를 이용해 컨테이너의 초기 요소 값을 설정할 수 없습니다.
queue 복사
queue<_Ty> q(_Right);
다른 queue를 복사하여 새로운 queue를 생성합니다.
- _Right는 복사할 queue를 나타냅니다.
주요 함수
size()
queue<int> q; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
size_t s = q.size(); // 6을 반환합니다.
queue의 크기를 반환합니다.
empty()
queue<int> q; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
bool is_empty = q.empty(); // false를 반환합니다.
queue가 비어있는지 여부(크기가 0이면 true, 그렇지 않으면 false)를 반환합니다.
front()
queue<int> q; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
int f = q.front(); // 1을 반환합니다.
queue에서 첫 번째 요소를 반환합니다.
back()
queue<int> q; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
int b = q.back(); // 6을 반환합니다.
queue에서 마지막 요소를 반환합니다.
push(value)
queue<int> q; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
q.push(7); // 컨테이너는 { 1, 2, 3, 4, 5, 6, 7 } 상태입니다.
queue의 가장 뒤에 요소를 추가합니다.
pop()
queue<int> q; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
q.pop(); // 컨테이너는 { 2, 3, 4, 5, 6 } 상태입니다.
queue의 가장 첫 번째 요소를 제거합니다.
swap()
queue<int> q1; // 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태라고 가정합니다.
queue<int> q2; // 컨테이너는 { 11, 22, 33, 44, 55, 66 } 상태라고 가정합니다.
q1.swap(q2);
// q1 컨테이너는 { 11, 22, 33, 44, 55, 66 } 상태입니다.
// q2 컨테이너는 { 1, 2, 3, 4, 5, 6 } 상태입니다.
queue의 모든 요소를 교환합니다.
반응형