C ++ deque 대 큐 대 스택 구조입니다. 그러나

대기열과 스택은 널리 언급되는 구조입니다. 그러나 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.

힌트 :
DequeD ouble e nded que ue”의 줄임말입니다 .


답변

deque컨테이너 템플릿입니다. .NET Framework와 매우 유사한 임의 액세스 반복기가있는 시퀀스에 대한 요구 사항을 충족합니다 vector.

queue컨테이너가 아니라 어댑터 입니다. 여기에는 컨테이너가 포함되어 있으며보다 구체적인 다른 인터페이스를 제공합니다. 사용 queue당신은 기억 (또는 생각 나게) 이외의 작업을하지 않도록하려는 경우 push[_back]pop[_front], frontback, sizeempty. queue처음과 마지막을 제외하고 내부의 요소를 전혀 볼 수 없습니다 !


답변

C ++ 라이브러리에서 std::stack및 둘 다 std::queue컨테이너 어댑터 로 구현됩니다. . 즉, 스택 또는 큐의 인터페이스를 각각 제공하지만 실제로는 컨테이너 자체가 아닙니다. 대신, 그들은 다른 컨테이너 (예를 들어 std::deque또는 std::list실제로 데이터를 저장하기 위해)를 사용하고, std::stack클래스는 번역 push하고 popto push_backand로 pop_back(그리고 std::queue거의 동일하지만 push_backand를 사용 하는) 아주 작은 코드를 가지고 pop_front있습니다.


답변

deque는 양쪽 끝에서 쉽게 삽입 / 제거 할 수있는 양면 대기열입니다. 대기열은 한쪽 끝에서만 삽입하고 다른 쪽 끝에서 검색 할 수 있습니다.


답변

deque는 후면 및 전면에서 삽입 / 팝을 지원합니다.

대기열은 뒤쪽으로 삽입하고 앞쪽에서 팝만 지원합니다. FIFO (선입 선출)입니다.


답변

deque는 양면입니다. 대기열은 그렇지 않습니다.