Namespaces
Variants

std:: queue

From cppreference.net
헤더 파일에 정의됨 <queue>
template <

class T,
class Container = std:: deque < T >

> class queue ;

std::queue 클래스 템플릿은 컨테이너 어댑터 로서 의 기능, 구체적으로 FIFO(선입선출) 데이터 구조의 기능을 제공합니다.

클래스 템플릿은 기본 컨테이너에 대한 래퍼 역할을 합니다 - 특정 함수 집합만 제공됩니다. 큐는 요소를 기본 컨테이너의 뒤쪽으로 푸시하고 앞쪽에서 팝합니다.

std::queue 의 모든 멤버 함수는 constexpr 입니다: 상수 표현식 평가에서 std::queue 객체를 생성하고 사용하는 것이 가능합니다.

그러나 std::queue 객체는 일반적으로 constexpr 일 수 없습니다. 동적으로 할당된 저장 공간은 동일한 상수 표현식 평가에서 해제되어야 하기 때문입니다.

(C++26부터)

목차

템플릿 매개변수

T - 저장되는 원소의 타입. T Container::value_type 와 동일한 타입이 아닌 경우 프로그램은 ill-formed입니다.
Container - 원소를 저장하는 데 사용되는 기반 컨테이너의 타입. 컨테이너는 SequenceContainer 요구 사항을 충족해야 합니다. 추가적으로 다음 함수들을 일반적인 의미론 으로 제공해야 합니다:

표준 컨테이너 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

멤버 객체

멤버 이름 정의
Container c
기반 컨테이너
(보호된 멤버 객체)

멤버 함수

queue 를 생성한다
(public member function)
queue 를 소멸시킨다
(public member function)
컨테이너 어댑터에 값을 할당한다
(public member function)
원소 접근
첫 번째 원소에 접근한다
(public member function)
마지막 원소에 접근한다
(public member function)
용량
컨테이너 어댑터가 비어 있는지 확인한다
(public member function)
원소의 개수를 반환한다
(public member function)
수정자
끝에 원소를 삽입한다
(public member function)
(C++23)
끝에 원소들의 범위를 삽입한다
(public member function)
(C++11)
끝에 제자리에서 원소를 생성한다
(public member function)
첫 번째 원소를 제거한다
(public member function)
(C++11)
내용을 교환한다
(public member function)

비멤버 함수

queue 의 값을 사전식으로 비교
(함수 템플릿)
std::swap 알고리즘의 특수화
(함수 템플릿)

헬퍼 클래스

std::uses_allocator 타입 특성의 특수화
(클래스 템플릿 특수화)
std::queue 에 대한 포매팅 지원
(클래스 템플릿 특수화)

연역 가이드

(C++17부터)

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_containers_ranges 202202L (C++23) 컨테이너를 위한 범위 생성 및 삽입
__cpp_lib_constexpr_queue 202502L (C++26) constexpr std::queue

예제

#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(); // front 요소 0 제거
    assert(q.size() == 3);
    // 모든 요소 출력 및 제거. std::queue는 begin()/end()를 지원하지 않으므로
    // 범위 기반 for 루프를 사용할 수 없음
    std::cout << "q: ";
    for (; !q.empty(); q.pop())
        std::cout << q.front() << ' ';
    std::cout << '\n';
    assert(q.size() == 0);
}

출력:

q: 1 2 3

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 307 C++98 std::queue 는 프록시 참조 타입을 사용하는 컨테이너를 지원하지 않음
( const ) value_type& 대신 사용 [1]
지원됨
LWG 2566 C++98 Container::value_type 에 대한 요구사항 누락 T Container::value_type 과 동일한 타입이 아닌 경우 형식 오류
  1. std::vector<bool> 와 유사한 컨테이너에 pop_front() 의 추가 지원을 포함하는 경우. 이 DR의 해결안은
    std::vector<bool> 에 대한 std::stack std::priority_queue 지원을 추가했습니다. std::queue 와 관련된 변경사항은
    일관성을 유지하기 위한 것입니다.

참고 항목

컨테이너를 우선순위 큐로 적응
(클래스 템플릿)
양방향 큐
(클래스 템플릿)
이중 연결 리스트
(클래스 템플릿)