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: 저장된 원소 타입. TContainer::value_type과 같지 않으면 프로그램은 ill-formed예요.
  • Container: 원소를 저장하는 데 쓸 기본 컨테이너 타입. SequenceContainer 요구사항을 만족해야 하고, 다음 함수들을 일반적 의미로 제공해야 해요: back(), front(), push_back(), pop_front(). 표준 컨테이너 std::dequestd::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 요구 누락 → TContainer::value_type과 다르면 ill-formed)이 있어요.

더 알아보기 (Learn more)

cppreference