대기열과 스택은 널리 언급되는 구조입니다. 그러나 C ++에서는 큐에 대해 두 가지 방법으로 수행 할 수 있습니다.
#include <queue>
#include <deque>
하지만 스택의 경우 다음과 같이 할 수 있습니다.
#include <stack>
내 질문은 대기열과 deque의 차이점이 무엇이며 왜 두 가지 구조가 제안됩니까? 스택의 경우 다른 구조가 포함될 수 있습니까?
답변:
Moron / Aryabhatta는 정확하지만 조금 더 자세히 설명하면 도움이 될 수 있습니다.
대기열 및 스택은 deque, vector 또는 list보다 상위 수준의 컨테이너입니다. 즉, 낮은 수준의 컨테이너에서 대기열을 만들거나 스택을 쌓을 수 있습니다.
예를 들면 :
std::stack<int, std::deque<int> > s;
std::queue<double, std::list<double> > q;
deque를 기본 컨테이너로 사용하고 목록을 기본 컨테이너로 사용하는 double 큐를 사용하여 int 스택을 빌드합니다.
s
제한된 deque 및 q
제한된 목록으로 생각할 수 있습니다 .
필요한 것은 하위 수준 컨테이너가 상위 수준 컨테이너에 필요한 메서드를 구현하는 것입니다. 이들은 back()
, push_back()
그리고 pop_back()
스택과 front()
, back()
, push_back()
, 그리고 pop_front()
큐.
데크와 관련하여 양쪽 끝에 삽입 할 수있는 대기열 이상의 역할을합니다. 특히 랜덤 액세스 권한이 있습니다 operator[]
. 이것은 벡터와 비슷하지만 시작 부분에 push_front()
및로 삽입 및 삭제할 수있는 벡터 pop_front()
입니다.
자세한 내용은 deque 를 참조하십시오 .
Queue
: 한쪽 끝만 삽입하고 다른 쪽 끝은 제거 할 수 있습니다.
Deque
: 양쪽 끝에서 삽입 및 제거가 가능합니다.
사용 a 그래서 Deque
, 당신은을 모델링 할 수 Queue
뿐만 아니라 Stack
.
힌트 :
Deque
" D ouble e nded que ue"의 줄임말입니다 .
queue
컨테이너의 요구 사항을 충족하지 않습니다. 이터레이터가 없습니다, 제발!
std::stack
사용합니다 std::deque
. 나는 여기에 그 이유를 추측한다 : stackoverflow.com/questions/102459/… (기본적으로 a를 키우는 것은 deque
오버 헤드가 적다 는 것 입니다).
deque
컨테이너 템플릿입니다. .NET Framework와 매우 유사한 임의 액세스 반복기가있는 시퀀스에 대한 요구 사항을 충족합니다 vector
.
queue
컨테이너가 아니라 어댑터 입니다. 여기에는 컨테이너가 포함되어 있으며보다 구체적인 다른 인터페이스를 제공합니다. 사용 queue
당신은 기억 (또는 생각 나게) 이외의 작업을하지 않도록하려는 경우 push[_back]
와 pop[_front]
, front
와 back
, size
와 empty
. queue
처음과 마지막을 제외하고 내부의 요소를 전혀 볼 수 없습니다 !
C ++ 라이브러리에서 std::stack
및 둘 다 std::queue
컨테이너 어댑터 로 구현됩니다. . 즉, 스택 또는 큐의 인터페이스를 각각 제공하지만 실제로는 컨테이너 자체가 아닙니다. 대신, 그들은 다른 컨테이너 (예를 들어 std::deque
또는 std::list
실제로 데이터를 저장하기 위해)를 사용하고, std::stack
클래스는 번역 push
하고 pop
to push_back
and로 pop_back
(그리고 std::queue
거의 동일하지만 push_back
and를 사용 하는) 아주 작은 코드를 가지고 pop_front
있습니다.
queue
VS도 , 및 에 매핑 pop
되는 것으로 보이 므로 구현에 따라 다릅니다. pop_front
push
push_back
pop_front
그리고 push_back
필요한 것입니다. 죄송합니다.
deque는 양면입니다. 대기열은 그렇지 않습니다.
우선 순위 대기열에서 대기열에서 빼는 순서가 아닌 일부 순서 (우선 순위) 비교에 따라 발생합니다.
예를 들어 가장 빠른 이벤트를 먼저 꺼내고 예정된 시간을 쿼리하여 해당 시점까지 잠을 잘 수 있도록 시간이 지정된 이벤트를 저장할 수 있습니다.
우선 순위 대기열은 종종 힙을 사용하여 구현됩니다.
Mike Anderson 작성 :
https://www.quora.com/What-is-the-difference-between-a-priority-queue-and-a-queue
stack
그리고queue
단지 제한deque
의 전체 된 형상에서.