std::queue
std::queue (큐 컨테이너 어댑터)
FIFO(선입선출, first-in first-out) 자료구조의 기능을 제공하는 컨테이너 어댑터예요. 원소를 뒤로 push하고 앞에서 pop해요.
출처: cppreference
본문
<queue> 헤더에 정의돼 있고, 컨테이너 어댑터예요.
template<
class T,
class Container = std::deque<T>
> class queue;
std::queue 클래스 템플릿은 큐(FIFO 자료구조)의 기능을 제공하는 컨테이너 어댑터예요. 기본 컨테이너의 래퍼 역할을 하며 특정 함수 집합만 제공해요. queue는 기본 컨테이너의 뒤로 원소를 push하고 앞에서 pop해요. C++26부터 모든 멤버 함수가 constexpr이에요.
템플릿 매개변수
T: 저장된 원소 타입.T가Container::value_type과 같지 않으면 프로그램은 ill-formed예요.Container: 원소를 저장하는 데 쓸 기본 컨테이너 타입.SequenceContainer요구사항을 만족해야 하고, 다음 함수들을 일반적 의미로 제공해야 해요:back(),front(),push_back(),pop_front(). 표준 컨테이너std::deque와std::list가 이 요구사항을 만족해요.
멤버 타입
container_type=Container,value_type=Container::value_type,size_type=Container::size_type,reference=Container::reference,const_reference=Container::const_reference.- 보호 멤버 객체
c: 기본 컨테이너.
멤버 함수
- 생성자, 소멸자,
operator=. - 원소 접근:
front,back. - 용량:
empty,size. - 수정자:
push,push_range(C++23),emplace(C++11),pop,swap(C++11).
비멤버 함수
operator==,!=,<,<=,>,>=,<=>(C++20): 두 queue 사전식 비교.std::swap(std::queue)(C++11):std::swap특수화.
헬퍼 클래스
std::uses_allocator<std::queue>(C++11):std::uses_allocator형질 특수화.std::formatter<std::queue>(C++23):std::queue포맷 지원.
C++17부터 추론 가이드가 있어요. 피처 테스트 매크로 __cpp_lib_containers_ranges(C++23), __cpp_lib_constexpr_queue(C++26)가 있어요.
예제를 보면 queue의 push/pop 동작을 확인할 수 있어요.
#include <cassert>
#include <iostream>
#include <queue>
int main()
{
std::queue<int> q;
q.push(0); // back이 0을 밀어넣음
q.push(1); // q = 0 1
q.push(2); // q = 0 1 2
q.push(3); // q = 0 1 2 3
assert(q.front() == 0);
assert(q.back() == 3);
assert(q.size() == 4);
q.pop(); // 앞 원소인 0 제거
assert(q.size() == 3);
// 모든 원소를 출력하며 제거
std::cout << "q: ";
for (; !q.empty(); q.pop())
std::cout << q.front() << ' ';
std::cout << '\n';
assert(q.size() == 0);
}
출력:
q: 1 2 3
결함 보고로 LWG 307(C++98, 프록시 참조 타입을 쓰는 컨테이너를 지원하지 않음 → 지원), LWG 2566(C++98, Container::value_type 요구 누락 → T가 Container::value_type과 다르면 ill-formed)이 있어요.