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
멤버 객체
멤버 함수
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)
끝에 원소들의 범위를 삽입한다
(public member function)
끝에 제자리에서 원소를 생성한다
(public member function)
첫 번째 원소를 제거한다
(public member function)
내용을 교환한다
(public member function)
비멤버 함수
두
queue
의 값을 사전식으로 비교
(함수 템플릿)
std::swap
알고리즘의 특수화
(함수 템플릿)
헬퍼 클래스
참고 사항
예제
#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 ) ;
}
출력:
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 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
와 관련된 변경사항은
일관성을 유지하기 위한 것입니다.
참고 항목
컨테이너를 우선순위 큐로 적응
(클래스 템플릿)
양방향 큐
(클래스 템플릿)
이중 연결 리스트
(클래스 템플릿)