IT

std :: stack이 기본적으로 std :: deque를 사용하는 이유는 무엇입니까?

lottoking 2020. 9. 25. 08:18
반응형

std :: stack이 기본적으로 std :: deque를 사용하는 이유는 무엇입니까?


스택에서 컨테이너를 사용하는 데 필요한 유일한 작업은 다음과 가능합니다.

  • 뒤 ()
  • push_back ()
  • pop_back ()

기본 컨테이너가 벡터 대신 데크 인 이유는 무엇입니까?

deque 재 할당은 push_front ()가 쉬운 작업이 충분한 front () 전에 요소의 버퍼를 제공하지 보장하지 않습니까? 많은 요소는 스택 스택에서 절대 사용하지 않는 것이 없습니까?

벡터 대신 이런 방식으로 deque를 사용하는 데 오버 헤드가 있습니까 priority_queue의 다중도 deque가 아닌 벡터 인 이유는 무엇입니까? (priority_queue에는 front (), push_back () 및 pop_back ()이 필요합니다. 기본적으로 스택과 동일합니다.)


아래 답변을 기반으로 업데이트되었습니다.

deque가 일반적으로 구현되는 방식은 고정 크기 배열의 가변 크기 인 배열입니다. 이는 벡터 (재 할당 및 복사가 필요함)보다 빠른 성장을위한 요소를 추가하고 제거하는 스택과 같은 경우에 더 나은 선택을 할 수 있습니다.

priority_queue는 제거 및 삽입 할 때마다 pop_heap () 또는 push_heap ()을 실행해야하는 인덱싱이 많이 필요합니다. 이 요소를 추가하는 것이 어쨌든 일정하게 상각되기 때문에 벡터가 더 나은 선택이 될 수 있습니다.


컨테이너가 커짐에 따라 벡터를 재 할당해야하는 모든 요소를 ​​새 메모리 블록에 복사해야합니다. deque를 늘리면 새 블록이 할당되고이를 블록 목록에 연결하여 필요하지 않습니다.

물론 원하는 경우 다른 백업 컨테이너를 사용 가능합니다. 따라서 스택이 많이 증가하지 않을 경우 사용하는 것을 알고있는 경우, 선호하는 deque를 사용하는 지시하십시오.


와 데크의 벡터 상대적인 장점에 대해서는 허브 셔터의 금주 (54)의 전문가참조하십시오 .

priority_queue와 queue 사이의 불일치는 다른 사람들이 구현 한 생각합니다.

참고 URL : https://stackoverflow.com/questions/102459/why-does-stdstack-use-stddeque-by-default

반응형