대기열과 스택은 널리 언급되는 구조입니다. 그러나 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”의 줄임말입니다 .
답변
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
있습니다.
답변
deque는 양쪽 끝에서 쉽게 삽입 / 제거 할 수있는 양면 대기열입니다. 대기열은 한쪽 끝에서만 삽입하고 다른 쪽 끝에서 검색 할 수 있습니다.
답변
deque는 후면 및 전면에서 삽입 / 팝을 지원합니다.
대기열은 뒤쪽으로 삽입하고 앞쪽에서 팝만 지원합니다. FIFO (선입 선출)입니다.
답변
deque는 양면입니다. 대기열은 그렇지 않습니다.