std:: queue
|
헤더 파일에 정의됨
<queue>
|
||
|
template
<
class
T,
|
||
std::queue
클래스 템플릿은
컨테이너 어댑터
로서
큐
의 기능, 구체적으로 FIFO(선입선출) 데이터 구조의 기능을 제공합니다.
클래스 템플릿은 기본 컨테이너에 대한 래퍼 역할을 합니다 - 특정 함수 집합만 제공됩니다. 큐는 요소를 기본 컨테이너의 뒤쪽으로 푸시하고 앞쪽에서 팝합니다.
std::queue
의 모든 멤버 함수는
constexpr
입니다: 상수 표현식 평가에서
std::queue
객체를 생성하고 사용하는 것이 가능합니다.
그러나
|
(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
의 값을 사전식으로 비교
(함수 템플릿) |
|
|
(C++11)
|
std::swap
알고리즘의 특수화
(함수 템플릿) |
헬퍼 클래스
|
(C++11)
|
std::uses_allocator
타입 특성의 특수화
(클래스 템플릿 특수화) |
|
(C++23)
|
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
과 동일한 타입이 아닌 경우 형식 오류
|
-
↑
std::vector<bool>
와 유사한 컨테이너에
pop_front()의 추가 지원을 포함하는 경우. 이 DR의 해결안은
std::vector<bool> 에 대한 std::stack 및 std::priority_queue 지원을 추가했습니다.std::queue와 관련된 변경사항은
일관성을 유지하기 위한 것입니다.
참고 항목
|
컨테이너를 우선순위 큐로 적응
(클래스 템플릿) |
|
|
양방향 큐
(클래스 템플릿) |
|
|
이중 연결 리스트
(클래스 템플릿) |